CocosBCX :1808标准和世界观系统

2019-04-09 23:48 评论 0 条

BCX-NHAS-1808标准

本章主要讲述,在支持非同质数字资产的Cocos-BCX链上,我们考察了现有的多种非同质数字资产标准,并结合游戏行业需求定义了BCX-NHAS-1808非同质数字资产标准用于规范所有将在BCX链上发布和流通的非同质数字资产。

1. 标准特性

泛用的唯一价值表达

1808标准定义的非同质数字资产支持丰富的数据自定义、扩展方法,对各类游戏中的资产类型有良好的兼容性,可作为各类游戏数据的泛用表达。

跨越多个使用场景而互不影响(世界墙)

扩展数据区域以域为单位组合,每一个域绑定一个或若干仅对自己负责的合约,代表的是一个使用场景(游戏世界)所专有的数据区域,域展开之后的键值对信息代表了一系列游戏业务相关的数据,而不同域之间的数据可互读但互不可写,即不同使用场景间的数据变更不会互相影响,游戏间的“世界墙”会阻止这些属性进入其他的世界,不会存在“A游戏中降级的装备到了B游戏发现居然也降级了”的情况。

世界观兼容设计

1808标准定义的非同质数字资产允许在同一世界观下的数字资产在不同的业务场景中使用,因此需要有一定的规则用于在不同业务实体中平衡该资产价值(能力值)。在1808标准中,资产实例在新的业务场景中引用时会确定一个相对属性,该属性以某一个确定的其他域数据作为参考,代表该资产的基本价值,并且该数据能够在同一世界观下的其他业务实体中识别,当该资产实例进入不同的业务实体时,会根据此属性确定在本业务实体中的价值,而其他属性例如装备技能等信息由业务实体的域数据形式补充。

跨网络跨标准兼容设计

本标准定义的数字资产具备兼容其他网络非同质数字资产标准的设计,包括ERC-721、ERC-1155、ERC-998等,其中针对通过合约定义的单一非同质数字资产类型(ERC-721等),可藉由定义一个具备相同自定义数据结构的资产类型完成资产实例的兼容;针对合约定义的可嵌套/组合资产类型(ERC-998等),可藉由在扩展数据区域中添加资产组合关系数据完成兼容。

允许资产所有者放弃特定域数据

1808标准数字资产的域数据会随着经历的游戏数量增加而留下游戏的记录,当所有者因为道具强化错误、被赋予负面属性、希望重新挑战游戏等原因不再需要某个游戏中产生的数据时,可以选择删除这个游戏对应的域数据,使资产重新以初始的状态进入游戏。资产所有者对资产域数据的控制权限仅限于对指定域数据的完全移除,而非对域数据进行修改,以免所有者通过修改这些域数据达到作弊效果。此外,域数据的删除权限也可以有效防止恶意合约向特定资产写入大量垃圾数据导致数据冗余。

在链内将资产作为镶嵌品或模块组合使用

808标准非同质资产的嵌套组合设计
以游戏为例,装备道具可能是由更多的组件、物品组合而成的,因此区块链游戏的非同质数字资产也应该具备能够嵌套包含的特性。这一情况下每一个非同质资产都可以由多个非同质资产组成,父级资产可以包含一个或多个子级资产,子级资产又可以包含其他的子级资产。

对于具有装备建造或组合的游戏场景,1808标准提供支持资产组合的设计,扩展数据中包含记录组合关系的区域,区域数据在资产组合时记录此次嵌套关系的信息,在此关系解除前,被嵌套的子级资产将无法发生所有权转移的行为。

2. 非同质资产标准对比

目前较为流行的非同质数字资产标准有以太坊网络的ERC-721、ERC-1155、ERC-998等,这些标准非同质资产用于以太坊网络上不同的使用场景和需求:

ERC-721

以太坊网络中被官方正式接受的一种通过智能合约定义的非同质数字资产标准,具备可自定义的数据区,为物品或记录的数字化提供了可能。 代表应用:加密猫、加密名人等。

ERC-1155

由Enjin提出的一种在以太坊的单一智能合约中定义多个非同质资产的标准接口,主要服务于区块链游戏中的虚拟道具。 代表应用:War of Crypto。

ERC-998

由Matt Lockyer提出的一种在以太坊的智能合约中定义的可组合非同质代币标准(CNFT, Composable NFTs) 。

非同质资产标准对比
上述三种非同质资产标准与1808标准的对比图,该图就非同质资产在链和游戏上可能涉及的要点作了简单对比,其中红色的差异部分正是COCOS-BCX针对链上游戏运行需求对1808标准设计的特性,这些特性除了与BCX链网络自身的特性有关外,也与1808标准资产的数据结构设计有关。

3. 数据结构

1808标准非同质资产的数据结构
如上图所示,1808标准非同质资产的数据结构分为两个基本功能区:固有数据区域用来存储非同质数字资产的基本信息,分为资产ID、世界观申明以及基础数据区域三段;扩展数据区域是为非同质数字资产属性扩展专门设计的功能性数据区域,包括组合关系数据和域数据两部分。

固有数据定义该非同质数字资产ID、世界观及其他基础数据,其中资产ID是该资产实例在分布记账式网络中的唯一标识,是该资产实例在进行访问、查询、修改等动作时的唯一凭据;世界观包括该资产生效和支持的游戏类型、世界,以及此资产在网络中流通需要使用的世界流通货币类型;基础数据包括资产所有者ID、制作者ID、制作时间和该资产的基本属性(例如装备描述等)。

数据包括资产所有者ID、制作者ID、制作时间和该资产的基本属性(例如装备描述等)。 扩展数据区域是该资产支持的世界观内各业务数据的存储区域,不同业务实体在该区域拥有专属的域标识和数据区,不同业务实体间的数据区相互隔离,域数据以域标识和数据的键值对形式存储,扩展区域同时包含一个用于表达资产组合、嵌套关系的数据区域,用于描述资产的组合和从属关系。

4. 数据结构对照

本标准定义的非同质数字资产固有数据区域各字段类型和标识对照表。

Asset_ID字段类型为asset_id_type,该类型的设计原则为保持网络中的唯一性即可,对ID长度没有硬性要求,但从多网络兼容性考虑,ID的最大样本数量应能够覆盖现有各式去中心分布账本式网络中的非同质数字资产实例的最大预期数量,例如以太坊网络中的资产ID为40字节长度的hash地址,可支持的最大样本数为1.462*10^48个,则在应用此标准的网络中设计此资产ID时应考虑使用样本容量大于该数值的hash地址或其他唯一标识方式。

World_view字段类型为world_view_type,包含此资产适用的世界观ID与该世界观对应的世界流通货币,其中世界观ID为网络唯一标识,流通货币为该货币的唯一符号(使用符号作为唯一凭证的网络)或地址(使用地址作为唯一凭证的网络)。

Asset_owner与Asset_creator字段类型为account_id_type,应采用具备唯一性和足够样本容量的数据类型

Asset_create_time字段类型为time_point_sec,用以标识此资产实例创造的日期,由该实例化事务完成时的账本时间戳决定

Asset_description字段类型为string,是一段可用于表达资产实例基本属性的数据,可采用自定的解析或加密方式处理该段数据以匹配特定的业务实体和应用场景

 

· Mod_data字段类型为id列表,是一个由标识父级资产ID和子级资产ID列表组成的关系表,用于描述不同业务实体中资产的组合、嵌套关系

· World_view字段类型为map,是一个由域标识和域数据组成的键值对映射表,其中域标识为业务实体的类型标记,对应一个或若干合约,该业务对此资产实例的所有数据交互将在此区域内进行

· Session_key字段类型为contract_id_type,为该业务应包含的一个或多核合约的id,该id应与其他唯一标识一样具备唯一性与充足的样本容量

· Session_data字段类型为map,由域内键inner_key和域内值inner_value这一键和值都为字符串的键值对组成,键与值的具体数据均由负责此域的业务实体自行定义,并可以根据其需求使用结构化或加密的字符串作为其中数据。

需求与认证设计

BCX-NHAS-1808标准非同质资产设计需求与链内认证设计

1. 非同质数字资产设计需求

差异性

· 不同类型的资产
· 同类型的资产在固有数据区域具备唯一标识
· 同类型的资产在固有数据区域可声明不同的世界观
· 同类型的资产在扩展数据区域可具备不同的域
· 同类型的资产在扩展数据区域的同一个域中可具备不同的具体数据

资产域数据的保密性

原则上分布记账式网络中数字资产数据应保持尽可能的公开和透明,但因为游戏开发、运行上的需求,本标准中定义的非同质数字资产在域数据的内容上,应支持自定义加密后的数据

资产数据安全性

· 分布记账式网络上的资产数据安全性需求包含以下方面:
· 资产的世界观等基础数据一旦发布不可修改
· 可扩展数据中某一域的所有者能且仅能更改自己域中的数据
· 合约对扩展数据的修改仅表现在该合约对应的域下
· 对于参与组合的非同质数字资产,其业务导致的所有权变更等行为应对组合的整体生效,且被组合的资产在接触之前无法单独进行此类操作
· 该资产的所有者有权删除可扩展数据中的域

认证信息的机密性

合约的所有权认证及认证过程应使用包括ECC、AES在内的加密手段以保证其机密性

跨网络数字资产流通性

基于本标准发布的非同质数字资产应具备能够通过一定方式兼容其他分布记账式网络的非同质数字资产,如ERC 721或ERC 875

2. 认证设计

认证需求

数字资产应包含对实例内所有数据的权限认证,包含以下规定的各种条件与场景:

· 数字资产创建时固有数据的认证设计
· 数字资产由合约修改时的认证设计
· 数字资产由所有者修改时的认证设计
· 数字资产之间进行组合、嵌套时的认证设计

认证模型

分布账本式网络的非同质数字资产相关认证参考模型
本标准定义的非同质数字资产在分布账本式网络中设计的认证包括:发布认证、访问/执行认证、所有权认证和域权限认证。

分布账本式网络中的非同质数字资产相关认证模型

· 发布认证用于资产完成定义后在网络中发布时的认证,包括发布者身份和操作权限认
· 访问/执行认证为业务实体对资产数据进行访问/修改时的认证,包括业务实体对资产中的业务数据的 访问或修改时的角色、操作权限认证和身份认证等
· 所有权认证用于判定资产实例所有者的身份,发生在资产转移、交易、删除域数据等场景
· 域权限认证用于判定业务实体是否具备修改某一特定域数据的权限,发生在业务实体对资产实例数据进行操作
· 处于组合状态的数字资产,其父级资产的所有权变更与子资产绑定,子资产在完成解除绑定前,无法进行所有权变更操
· 对认证信息的要求
· 对于认证信息中的私密性信息,包括各方(发布者、业务实体、资产所有者等)的密钥材料、授权与临时授权密钥及· 其他衍生密钥,业务实体的临时身份标识等,都需要存储在各自的安全介质
· 签名信息应该安全地存储在分布记账式网络中,只有通过网络的授权访问可以查询签名信息
· 事务的签名应采用尽可能安全的、隔离的环境进行,如隔绝网络的离线环境等
· 临时授权及衍生授权信息应该具有抗猜解冗余设置

世界观系统

游戏世界与世界观系统

与传统游戏行业的概念不同,BCX的区块链游戏并非完全相互独立的业务场景,每一个链游戏可认为是一个游戏世界,而数个具有相似基本设定的游戏世界组合在一起即可以认为这几个游戏世界拥有一个共同的世界观。

在不同游戏世界中使用的世界观道具
世界观这一概念并非区块链游戏首创,现代游戏行业已经有许多游戏具备了这一特性,例如《魔兽争霸》、《魔兽世界》、《炉石传说》、《风暴传说》拥有共同的暴雪宇宙世界观,其中有相当部分的游戏道具、角色、资产是共通的,虽然这些资产在各自的游戏中有不同的具体属性、技能等解释,但这些资产的设计基础源于共同的基本规则。

区块链游戏的世界观是一种用于区分游戏故事设定、角色/道具/规则设定和效用范围的标识。游戏道具在世界观中遵循统一的世界规范,能够通过支付迁移费用在本世界观下的不同游戏世界中迁移,即游戏道具的“穿越”。

世界线穿越、多元宇宙与平行世界

游戏道具是一种用于链上游戏的非同质数字资产,而道具“穿越”世界线的过程即某一非同质数字资产在同一世界观下不同游戏、业务里应用、变化的过程。

1808标准非同质资产提供了链上游戏设计多元宇宙/平行宇宙的可能性,不同的游戏世界观也是不同的游戏宇宙,百家齐鸣的游戏世界观也将构成链上游戏的多元宇宙,这些宇宙内拥有可以自由流通的游戏道具,这些道具在不同游戏中被写上了不同的属性、技能等,它们各自存在又互不影响,即“平行世界”中的道具设计。

可扩展的自定义数据能够让游戏设计者创造各具特色的游戏资产,互不干涉的域数据设计让游戏资产在“穿越”世界、宇宙时允许被赋予不受干扰的全新属性,同时也为游戏间数据联动(例如技能增益/减益)设计提供了可能,下图将是一个链上游戏资产在穿越世界线/平行世界的示例:

道具穿越世界线设计的示例
根据游戏运营设计,1808标准非同质资产支持通过特定的第三方有偿穿越世界线的设计,这一机制有助于游戏运营在道具平衡性和资产流通量控制上作出符合需求的设计。

世界观系统中的数据管控方式

1808标准非同质数字资产在链上完成初始定义并通过智能合约操作,且1808标准本身包含较为复杂的数据结构和组合设计,因此世界观系统下的资产数据安全设计显得更为重要,COCOS-BCX针对链上数据操作过程中可能发生的风险和隐患进行了分析,并着手修复和改进。

资产与其他数据分离

分离的数据存储可以保证资产所有者拥有对资产的完全所有权,而若合约与资产使用合并的存储,则特定的合约可以在合约开发者的权限下调用合约拥有的他人资产,这是非常不安全的。在COCOS-BCX中,同质、非同质资产和智能合约的数据均为分离存储式设计,这除了有助于减少数据流转消耗、提高链效率外,是一种更具备数据安全性的设计。

带有身份核验的合约执行验证机制

对于涉及敏感操作的合约函数,COCOS-BCX允许开发者定义具有身份验证的合约执行机制,设有验证的合约函数只会在满足要求的调用者调取时才会执行,避免黑客恶意执行特定合约接口进行非法资产操作的风险。

以域设计对合约权限进行控制

合约能够获取1808标准资产扩展数据中的所有域数据,但对资产数据的修改将被限定在标记为当前合约的域中,即A游戏可以知道资产在B游戏中的属性数据,但对资产的改动只会保存在A域中,且A合约无法修改B域中的任何数据。

资产所有者对域数据的管理模式

域数据随着游戏的增加不断补充,而追加的域数据过多或收到恶意合约故意追加无效域数据时会影响业务的执行效率,导致用户资产数据冗余,为了避免这种情况的出现,1808标准资产允许用户删除资产扩展数据中特定的域,但此权限仅赋予用户删除域数据的权力而不包括修改这些域数据的权力,以防用户通过修改这些数据而作弊。

1808 标准与世界观系统应用范例

本章将主要说明在Cocos-BCX 链中,使用合约对1808 非同质数字资产操作,以及世界观内非同质数字资产如何穿越、联动的示例。

1. 合约对1808 标准资产的操作

非同质资产所有权转移

非同质资产转移 – 调用者

◼ 函数原型

void transfer_nht_from_caller(string to, string token_hash_or_id)

◼ 调用说明

从合约调用者转移非同质资产到账户to

◼ 参数说明

to:目标账户,token_hash_or_id:指定的非同质资产hash 值或者id 编号

非同质资产转移 – 所有者

◼ 函数原型

void transfer_nht_from_owner(string to, string token_hash_or_id)

◼ 调用说明

从合约所有者转移非同质资产到账户to

◼ 参数说明

to:目标账户,token_hash_or_id:指定的非同质资产hash 值或者id 编号4.1.2. 修改非同质资产数据(特定数据域内)

非同质资产转移 – 所有者

◼ 函数原型

void nht_describe_change(string nht_hash_or_id, string key, string value)

◼ 调用说明

修改非同质资产的合约相关描述,修改部分为合约对应的域

◼ 参数说明

token_hash_or_id:指定的非同质资产hash 值或者id 编号,key:描述项索引,value:索引对应的描述信息

2. 场景范例

游戏(合约)内强化装备

本例是一个游戏道具穿越游戏世界的范例。本范例场景下,游戏服务有偿授权玩家道具穿越到自己的游戏世界,玩家通过支付穿越所需的资产后游戏服务将允许玩家的指定道具进入到游戏世界(合约系统)中。

游戏服务在玩家道具的域信息中提取需要的信息并提交至合约,由于与之前的游戏有联动活动,开发者在合约中设计了与以往游戏技能联动的设计(如下文代码中所示'eyes of hawk'等),使穿越到本世界中的道具一开始便可获得技能属性等。

JavaScript

--合约函数:初始化穿越世界的游戏道具

-- item_id:道具ID

Project Cocos-BCX

16

-- original_skill:原游戏中的技能信息

-- add_skill:本游戏中追加联动技能

-- add_description:在本游戏域数据中追加的描述

function init_item_from_another_world( item_id, original_skill, add_skill, add_description)

--信息的非空判断

assert(original_skill!=nil,'null original skill info')

assert(add_skill!=nil,'null add skill info')

assert(add_description!=nil,'null description info')

local add_skill_value='null'

--对原游戏中的技能信息的判断并得出本游戏中联动的技能信息

local switch={

['eyes of hawk']=function() add_skill_value='{"VIT_UP":25}' end

['heart of lion']=function() add_skill_value='{"STR_UP":50}' end

['speed of pard']=function() add_skill_value='{"AGI_UP":40}' end

['wisdom of dwarf']=function() add_skill_value='{"INT_UP":30}' end

}

local res=switch[original_skill]

if(res)then

res()

--将联动的技能信息更新到域数据中

nht_describe_change( item_id, add_skill, add_skill_value)

nht_describe_change( item_id, 'another_world_message', add_description)

else

assert(res,'unexpected original game skill type')

3. 复杂业务模式的实现

改进的Cocos-BCX 链新增了多种原子OP 和数据结构用于实现可能的新型业务,结合自身合约系统,开发者能轻松实现链上的复杂金融业务模式,例如:资产租赁、抵押、典当等。这些新型业务模式将极大改善传统链系统经济模式单一缺少流动性的弊端,进一步活化市场行为。下面简单介绍在BCX 中实现这三种业务模式的设计思路。

租赁

合约设计:

⚫ 定义发起租赁、转移使用权、收回使用权、库存状态查询、库存更新等租赁业务各流程的函数。
⚫ 定义一个可供租用的资产池,带有标价等信息。流程:
⚫ 所有者在合约中通过库存更新函数加入需要出租的资产信息,并规定租金/计算规则;
⚫ 租户通过发起租赁的函数交纳租金等资产后租约成立;
⚫ 合约通过转移使用权函数定义资产使用权黑白名单并将使用权转交至租户,随后将租金转至所有者账户,将库存资产的状态标记为已出租,同时定义一个定时任务——在到期时调用收回使用权函数;
⚫ 定时任务到期时,调用合约收回使用权函数,将资产使用权转回所有者。

抵押

合约设计:

⚫ 定义发起抵押、转移所有权、收回使用权、抵押品状态查询、设置可抵押清单等抵押业务各流程的函数;
⚫ 定义一个抵押物记录结构,带有可供抵押资产的信息与已抵押当的资产信息。流程:
⚫ 抵押权人通过设置可抵押清单函数设置可供抵押的物品信息,标记抵押价格或计算规则等;
⚫ 抵押人通过发起抵押的函数将资产所有权转至抵押权人,并收到抵押权人支付的押金,更新抵押拼记录清单中,同时发布一个定时任务——期限到达时根据赎回与否转移物品使用权;
⚫ 定时任务到期时,若押金支付等条件未满足,则调用合约的收回使用权函数,通过使用权变更函数将资产使用权转到抵押权人账户,若完成赎回,则调用合约的转移所有权函数,将所有权转还至抵押人。

典当

合约设计:

⚫ 定义发起典当、转移使用权、收回所有权、当品状态查询、设置典当清单等典当业务各流程的函数;
⚫ 定义一个典当品记录结构,带有可供典当资产的信息与已经典当的资产信息。推演流程:
⚫ 典当权人通过设置典当清单函数设置可供典当的物品信息,标记典当价格或计算规则等;
⚫ 典当人通过发起典当的函数将资产使用权转至典当权人,并收到典当权人支付的押金,更新典当清单中的记录,同时发布一个定时任务——根据需要可以设计为定期返还押金/按期支付利息/两者兼有的模式;
⚫ 定时任务到期时,若押金支付等条件未满足,则调用合约的收回所有权函数,通过所有权变更OP 将资产所有权转到典当权人账户,若达成条件,则通过使用权变更OP 将使用权转移至典当人。

本文转自《区块网》

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:CocosBCX :1808标准和世界观系统 | BitOL|比特在线-关注区块链技术动态的小博客
分类:区块链技术动态 标签:

评论已关闭!