GOVM后台的合约流程
发布的合约是一份golang的源码,节点在接收该合约时(其实接收的是交易,合约是交易的数据),会在节点本地创建一个文件夹,放置合约代码,然后创建对应的main函数,编译成一个可执行文件。合约的执行就是执行对应的可执行文件。
因为golang是跨平台的语言,GOVM整个都是golang开发的,所以它可以部署在大部分的系统上,包括windows、linux等(为避免不一致,要求必须为64位操作系统)。
创建合约流程
- 编写代码:根据合约的功能,完成相应代码的开发。类似第二章的步骤。后续会增加离线调测的配套工具。
- 获取代币:通过挖矿或其他方式获取。
- 创建交易:通过浏览器发布相应的合约,govm完成的流程如下:
- 读取源码
- 分离import模块
- 统计代码行数
- 生成合约代码
- 封装到交易里
- 交易签名
- 发送交易
- 交易本地验证
- 广播交易
- 页面显示合约的名字
- 矿工节点打包交易(挖矿):接受交易,验证交易,将交易打包进区块里,广播生成的区块。
- 节点接受区块并验证(合约本地生成的步骤):
- 将交易中的合约代码提取出来
- 根据规则生成合约名字(默认为代码的哈希值)
- 创建合约的文件夹(chain*文件夹里,以合约名字为文件夹名字)
- 将源码放到文件夹里(会自动增加费用消耗的代码)
- 增加main函数调用合约的run函数,编译成可执行文件,并放到合约文件夹里,然后删除main。
执行合约流程
- 如果合约有配套的操作页面,建议使用对应的操作页面。
- 获取代币
- 创建执行合约的交易:
- 交易被打包进区块
- 区块验证(处理交易):
- 按照交易中的信息,扣掉调用者(用户)对应的代币
- 验证合约是否存在,是否可执行
- 将用户地址、合约参数、金额(花费的代币)传给合约可执行文件
- 合约作为子进程执行(解析参数,校验金额,读写数据库等等)
- 如果一切正常,合约将正常退出。
- 如果异常,将自动回滚数据,删除区块。