本文共 920 字,大约阅读时间需要 3 分钟。
1. 智能合约相关
合约账户和外部账户分开
合约账户对外部账户一律平等,即使是发起该合约创建请求的外部账户也没有对合约账户的特殊权限。
合约只有在交易调用时才会运行:使用地址对象或者msg对象来调用合约或者合约中的函数,并将输入作为参数输入合约。
调用方式既可以是外部账户的交易调用合约,也可以是合约调用另一个合约。
合约不能“独立运行”或者“后台运行”,通常情况下合约处于休眠状态,只有被调用触发时才会执行。
合约的数据来源于该合约被调用时的参数输人,或者调用其他合约时的返回值。
2. 以太坊智能合约的流程
2.1 合约创建
step1. 用户通过Solidity等编程语言编写合约代码并广播到网络中
step2.节点接收到交易,验证交易是否有效,格式是否正确、签名是否合法,同时判断用户余额是否能够扣除最大交易费。 step3. 如果这些验证都成功,节点会将交易存放到交易池中并广播给其他节点。2.2 合约部署
step1. 每个节点都会各自从本地的交易池中取出一批交易打包进行hash 计算
step2. 如果该节点获得记账权且打包区块中存在创建合约请求的交易,会根据交易中的合约代码创建合约账户 step3. 节点在账户空间中部署合约,合约账户地址在创建合约交易确认后发送给发起该笔交易的用户。 step4. 节点将区块广播给其他节点,这些节点接收到区块并对区块和区块中的交易验证成功后,同样会创建合约账户。2.3 合约执行
如果有合约调用的交易,节点在获得记账权并将其打包到区块的时候,会在EVM中执行调用的合约并修改本地区块链中的数据,如果执行失败则回滚到代码执行前的状态。
最后把区块广播给其他节点,这些节点重复上述执行操作。
2.4 合约升级
2.5 合约销毁
可以将代码删除及其内部状态(存储)以留下空白账户。
转载地址:http://dovli.baihongyu.com/