智能合约重构社会契约(7)以太坊总结
1. 智能合約相關(guān)
-
合約賬戶和外部賬戶分開(kāi)
-
合約賬戶對(duì)外部賬戶一律平等,即使是發(fā)起該合約創(chuàng)建請(qǐng)求的外部賬戶也沒(méi)有對(duì)合約賬戶的特殊權(quán)限。
-
合約只有在交易調(diào)用時(shí)才會(huì)運(yùn)行:使用地址對(duì)象或者msg對(duì)象來(lái)調(diào)用合約或者合約中的函數(shù),并將輸入作為參數(shù)輸入合約。
-
調(diào)用方式既可以是外部賬戶的交易調(diào)用合約,也可以是合約調(diào)用另一個(gè)合約。
-
合約不能“獨(dú)立運(yùn)行”或者“后臺(tái)運(yùn)行”,通常情況下合約處于休眠狀態(tài),只有被調(diào)用觸發(fā)時(shí)才會(huì)執(zhí)行。
-
合約的數(shù)據(jù)來(lái)源于該合約被調(diào)用時(shí)的參數(shù)輸人,或者調(diào)用其他合約時(shí)的返回值。
2. 以太坊智能合約的流程
2.1 合約創(chuàng)建
step1. 用戶通過(guò)Solidity等編程語(yǔ)言編寫合約代碼并廣播到網(wǎng)絡(luò)中
step2.節(jié)點(diǎn)接收到交易,驗(yàn)證交易是否有效,格式是否正確、簽名是否合法,同時(shí)判斷用戶余額是否能夠扣除最大交易費(fèi)。
step3. 如果這些驗(yàn)證都成功,節(jié)點(diǎn)會(huì)將交易存放到交易池中并廣播給其他節(jié)點(diǎn)。
2.2 合約部署
step1. 每個(gè)節(jié)點(diǎn)都會(huì)各自從本地的交易池中取出一批交易打包進(jìn)行hash 計(jì)算
step2. 如果該節(jié)點(diǎn)獲得記賬權(quán)且打包區(qū)塊中存在創(chuàng)建合約請(qǐng)求的交易,會(huì)根據(jù)交易中的合約代碼創(chuàng)建合約賬戶
step3. 節(jié)點(diǎn)在賬戶空間中部署合約,合約賬戶地址在創(chuàng)建合約交易確認(rèn)后發(fā)送給發(fā)起該筆交易的用戶。
step4. 節(jié)點(diǎn)將區(qū)塊廣播給其他節(jié)點(diǎn),這些節(jié)點(diǎn)接收到區(qū)塊并對(duì)區(qū)塊和區(qū)塊中的交易驗(yàn)證成功后,同樣會(huì)創(chuàng)建合約賬戶。
2.3 合約執(zhí)行
如果有合約調(diào)用的交易,節(jié)點(diǎn)在獲得記賬權(quán)并將其打包到區(qū)塊的時(shí)候,會(huì)在EVM中執(zhí)行調(diào)用的合約并修改本地區(qū)塊鏈中的數(shù)據(jù),如果執(zhí)行失敗則回滾到代碼執(zhí)行前的狀態(tài)。
最后把區(qū)塊廣播給其他節(jié)點(diǎn),這些節(jié)點(diǎn)重復(fù)上述執(zhí)行操作。
2.4 合約升級(jí)
- 在以太坊中,部署到區(qū)塊鏈上的代碼是不可改變的。
- 部署一個(gè)擁有調(diào)用轉(zhuǎn)發(fā)功能的智能合約,將接收到的調(diào)用轉(zhuǎn)發(fā)給另外一個(gè)包含邏輯功能的合約地址,當(dāng)合約進(jìn)行升級(jí)時(shí).只需要部署一個(gè)新的合約并修改轉(zhuǎn)發(fā)的目標(biāo)地址以指向新的合約。
2.5 合約銷毀
可以將代碼刪除及其內(nèi)部狀態(tài)(存儲(chǔ))以留下空白賬戶。
- 要銷毀合約.需要調(diào)用合約中的自毀函數(shù),這個(gè)函數(shù)是合約作者編寫的加果沒(méi)有則不能刪除智能合約。
總結(jié)
以上是生活随笔為你收集整理的智能合约重构社会契约(7)以太坊总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 区块链BaaS云服务(24)秘猿科技CI
- 下一篇: 趣链 BitXHub跨链平台 (1)技术