NFT置换系统开发详细丨NFT置换智能合约游戏系统开发实现技术分析

2022-07-21 14:12:25 浏览数 (1)

  区块链是一种将数据区块按照时间顺序组合成的链式结构,是去中心化系统中各节点共享且共同维护的分布式数据账本[7],具体的:各节点由P2P组网方式相互连通和交互,受激励机制激励贡献自身算力,根据数据验证机制及传播协议,执行、验证并传播一段时间内生成的有效交易数据,同时利用Merkle树、哈希算法、时间戳等技术加密、生成数据区块,依据共识算法争夺记账权,最终获得记账权的节点(矿工),将其生成的数据区块链接到区块链主链上并获得相应奖励,其余节点更新区块链账本.

  区块链具有去信任、去中心化、开放自治、匿名可溯源、信息不可篡改等特性,自问世以来就显示出广阔的应用前景,吸引了学术界和工业界的大量关注,目前区块链技术已被应用于医疗、金融、物联网、能源等诸多领域.一般来说,区块链可按许可权限分为公有区块链、联盟区块链和私有区块链,其中,公有链面向全球所有用户,任何人都可以在其中读取数据和发送交易;联盟链由若干业务相关的机构共同参与管理,每个机构都运行着一个或多个节点,读写权限仅对联盟内的节点有限度地开放;私有链的读写权限由某个组织或机构控制,参与节点的资格被严格限制.

  基于区块链的分布式架构、共识算法等,智能合约允许相互不信任的用户在不需要任何第三方可信中介或权威的情况下完成交易,同时,数字形式的智能合约可灵活嵌入各种有形或无形的资产、交易和数据中,实现主动或被动的资产、信息管理与控制,逐步构建可编程的智能资产、系统及社会.

  智能合约的运行机制

  智能合约的运行机制如图1所示,智能合约一般具有值和状态两个属性,代码中用If-Then和What-If语句预置了合约条款的相应触发场景和响应规则,智能合约经多方共同协定、各自签署后随用户发起的交易(Transaction,Txn)提交,经P2P网络传播、矿工验证后存储在区块链特定区块中,用户得到返回的合约地址及合约接口等信息后即可通过发起交易来调用合约.矿工受系统预设的激励机制激励,将贡献自身算力来验证交易,矿工收到合约创建或调用交易后在本地沙箱执行环境(如以太坊虚拟机)中创建合约或执行合约代码,合约代码根据可信外部数据源(也称为预言机,Oracles)和世界状态的检查信息自动判断当前所处场景是否满足合约触发条件以严格执行响应规则并更新世界状态.交易验证有效后被打包进新的数据区块,新区块经共识算法认证后链接到区块链主链,所有更新生效.

  由于区块链种类及运行机制的差异,不同平台上智能合约的运行机制也有所不同,以太坊和超级账本是目前应用最广泛的两种智能合约开发平台,它们的智能合约运行机制最具代表性,以下将以这两种平台为例,阐述智能合约的运行机制.

  1)以太坊

  以太坊在整体上可看作是一个基于交易的状态机:起始于一个创世(Genesis)状态,然后随着交易的执行,状态逐步改变一直到最终状态,这个最终状态就是以太坊世界的权威版本[5].以太坊中引入了账户的概念以取代比特币未花费交易输出(Unspent transaction output,UTXO)模型,账户分为外部账户和合约账户两类,两类账户都具有与之关联的账户状态和账户地址,都可以存储以太坊专用加密货币以太币,区别在于外部账户由用户私钥控制,没有代码与之关联,合约账户由合约代码控制,有代码与之关联.

  用户只能通过外部账户在以太坊中发起交易,交易可以包含二进制交易负载数据(Payload)和以太币,交易执行过程中可能产生一系列消息调用.当交易或消息调用的接收者为以太坊指定地址Ø时,创建合约.新合约账户地址由合约创建者的地址和该地址发出过的交易数量Nonce计算得到,创建合约交易的Payload被编译为EVM字节码执行,执行的输出作为合约代码被永久存储.当接收者为合约账户时,合约账户内代码被激发在本地EVM中执行,Payload作为合约的输入参数,可信数据源则为合约提供必要外部世界信息.所有执行结束后,返回执行结果,完整交易经矿工广播验证后和新的世界状态一起存入区块链.

  考虑到以太坊交易伴随带宽消耗,存储消耗,计算消耗等,为了激励全球算力的投入和合理分配使用权,避免系统因恶意程序走向失控,以太坊中所有程序的执行都需要支付费用.各种操作费用以Gas为单位计算,任意的程序片段都可以根据规则计算出消耗的燃料数量,完整交易的发起者需支付所有执行费用.交易完成后,剩余的燃料以购买时的价格退回到交易发送者账户,未退回的费用作为挖出包含此交易区块的矿工的奖励.若交易执行过程中发生燃料不足(Out of gas,OOG)、堆栈溢出、无效指令等异常而中止,交易将成为无效交易,已消耗Gas仍作为矿工贡献其计算资源的奖励.

  2)超级账本

  超级账本(Hyperledger fabric)最早是由国际商业机器公司(International business machines corporation,IBM)牵头发起的致力于打造区块链技术开源规范和标准的联盟链,2015年起成为开源项目并移交给Linux基金会维护.不同于比特币、以太坊等全球共享的公有链,超级账本只允许获得许可的相关商业组织参与、共享和维护,由于这些商业组织之间本身就有一定的信任基础,超级账本被认为并非完全去中心化.

  超级账本使用模块化的体系结构,开发者可按需求在平台上自由组合可插拔的会员服务、共识算法、加密算法等组件组成目标网络及应用.链码(Chaincode)是超级账本中的智能合约,开发者利用链码与超级账本交互以开发业务、定义资产和管理去中心化应用.联盟链中每个组织成员都拥有和维护代表该组织利益的一个或多个Peer节点,联盟链由多个组织的Peer节点共同构成.Peer节点是链码及分布式账本的宿主,可在Docker容器中运行链码,实现对分布式账本上键-值对或其他状态数据库的读/写操作,从而更新和维护账本.

  超级账本的运行过程包含三个阶段[8]:

  提议(Proposal):应用程序创建一个包含账本更新的交易提议(Proposal),并将该提议发送给链码中背书策略指定的背书节点集合(Endorsing peers set)作签名背书.每个背书节点独立地执行链码并生成各自的交易提议响应后,将响应值、读/写集合和签名等返回给应用程序.当应用程序收集到足够数量的背书节点响应后,提议阶段结束.

  打包(Packaging):应用程序验证背书节点的响应值、读/写集合和签名等,确认所收到的交易提议响应一致后,将交易提交给排序节点(Orderer).排序节点对收到的众多交易进行排序并分批打包成数据区块后将数据区块广播给所有与之相连接的Peer节点.

  验证(Validation):与排序节点相连接的Peer节点逐一验证数据区块中的交易,确保交易严格依照事先确定的背书策略由所有对应的组织签名背书.验证通过后,所有Peer节点将新的数据区块添加至当前区块链的末端,更新账本.需要注意的是,此阶段不需要运行链码,链码仅在提议阶段运行.

0 人点赞