一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。
按现在计算机的观点来看,智能合约就是一个在计算机系统上,当一定条件被满足的情况下,可以被自动执行的合约,也就是代码化的一个约定。比如信用卡自动还款、SP业务自动续订等等,也可以算是一种简单的智能合约。
基于区块链的智能合约构建及执行分为如下步骤:
1、智能合约的构建:由区块链内的多个用户共同参与制定一份智能合约;
2、智能合约的存储:智能合约通过P2P网络扩散到每个节点,并存入区块链;
3、智能合约的执行:智能合约定期进行自动机状态检查,将满足条件的事务进行验证,达成共识后自动执行并通知用户。
合约创建:智能合约DAPP质押挖矿系统开发详细对接唯:StPv888
用户编写完成智能合约后,经过编译器编译为字节码,需要通过发送交易的形式部署到区块链上。发送的交易将被共识节点和同步节点接收和处理,在校验完成各项参数后,字节码将被存储在区块链数据库中。
在校验参数的过程中,如果下列校验出错,将把执行的错误信息记录在交易的执行结果中:
同一条链上不允许存在重名的合约
字节码不能为空
指定的智能合约执行引擎必须有效
版本信息不能为空
随后将调用执行合约的初始化方法:
对于WASM而言,将调用合约的init_contract()方法,用户必须提供导出的init_contract()方法
对于EVM而言,将调用合约的构造方法
合约升级
ChainMaker支持对基于WASM和EVM的字节码进行升级
对于WASM而言,将调用upgrade_contract()方法,用户必须提供导出的upgrade_contract()方法
对于EVM而言,并不会调用任何方法,只是单纯更新字节码
对于DOCKER_GO而言,将调用InitContract()方法,该方法用于合约的部署与升级
合约升级也需要校验参数,如果下列校验出错,将把执行的错误信息记录在交易的执行结果中:
合约必须已经被部署成功
字节码不能为空
智能合约事件
智能合约事件(contract event)是合约虚拟机中提供的一种智能合约向客户端发送通知消息的功能。当一笔交易触发了合约事件时,事件数据会进行广播并记录在区块当中。
事件的发送:用户可以在合约函数中指定合约事件topic和对应的合约事件数据,当一笔交易调用了包含合约事件的函数即可触发合约事件,ChainMaker会向指定的topic发送事件数据,从而进行合约事件发送。
参见智能合约章节,智能合约示例代码说明部分。
事件的订阅:用户V+StPv888可以使用ChainMaker SDK进行合约事件的订阅,如果用户对指定topic进行了订阅,当合约事件触发后,用户会收到对应topic的合约事件数据。
参见GoSDK使用说明消息订阅章节。
事件的存储:合约事件功能支持用户可配置存储,目前支持mysql的可配置存储。