如何編寫乙個可公升級的智慧型合約

2021-09-12 23:02:55 字數 1099 閱讀 5029

區塊鏈信任基礎的資料不可修改的特性,讓它傳統應用程式有乙個很大的不同的地方是一經發布於區塊鏈上就無法修改(不能直接在原有的合約上直接修改再重新發布)。

寫在前面

閱讀本文前,你應該對以太坊、智慧型合約及solidity語言有所了解,如果你還不了解,建議你先看以太坊是什麼

當智慧型合約出現bug

一方面正式由於智慧型合約的不可修改的特性,因為只要規則確定之後,沒人能夠修改它,大家才能夠信任它。但另一方面,如果規則的實現有bug, 可能會造成代幣被盜,或是呼叫消耗大量的gas。這時就需要我們去修復錯誤。

我們知道乙個智慧型合約包含兩部分: **邏輯和資料,而**邏輯又是最容易出問題的部分, 如在實現如下合約時,由於手抖在寫addte1n()時,10寫成了11。

pragma solidity ^0.4.18;

contract mycontract

function addten(address addr) public returns (uint) }

假如我們在部署之後發現了這個問題,想要修復這個bug的話,只好重新部署合約,可是這時會有乙個尷尬的問題,原來的合約已經有很多人使用,如果部署新的合約,老合約的資料將會丟失。

資料合約及控制合約

那麼如何解決上面的問題了,乙個解決方案是分離合約中的資料,使用乙個單獨的合約來儲存資料(下文稱資料合約),使用乙個單獨的合約寫業務邏輯(下文稱控制合約)。

我們來看看**如何實現。

pragma solidity ^0.4.18;

contract datacontract

contract controlcontract

function addten(address addr) public returns (uint)contract datacontract

function setblance(address _address,uint256 v) public

modifier platform()

function allowaccess(address _addr) platform public

function denyaccess(address _addr) platform public

智慧型合約內部呼叫另乙個智慧型合約

最近在看以太坊,順便記錄一下,這篇文章的目的是乙個智慧型合約呼叫另乙個智慧型合約的方法,寫個demo記錄一下 pragma solidity 0.4.18 contract datacontract contract controlcontract function set uint256 valu...

Solidify實現乙個智慧型合約11(結構體)

結構體的宣告 pragma solidity 0.4.4 contract students person person new person 5 結構體的初始化 pragma solidity 0.4.4 contract students 建立物件陣列 person persons new pe...

如何編寫乙個 XML Schema

看看這個名為 shiporder.xml 的 xml 文件 george bush john adams oxford street london uk empire burlesque special edition 110.90 hide your heart 19.90 說明 上面的xml文件...