Contract-Deployment
在新的智能合約旁邊或內部發送額外數據
我正在研究乙太坊智能合約的安全性,當我在網路上部署該合約時,我需要在新的智能合約旁邊或內部發送一些額外的數據(例如一些 json 數據)。有可能嗎?我該怎麼做?
有不同的方法來做到這一點。首先,您可以像這樣將數據嵌入到智能合約的程式碼中:
contract Foo { string public constant bar = "Hello, World!"; }
其次,您可以將數據作為建構子參數傳遞:
contract Foo { constructor (string memory _bar) public { } }
在這個例子中,建構子不對數據做任何事情。但是,鏈下應用程序仍然可以訪問數據。為了使訪問更方便,您可以在事件中記錄數據:
contract Foo { event Bar (string bar); constructor (string memory _bar) public { emit Bar (_bar); } }
如果您希望該智能合約的其他功能可以訪問數據,可以將其保存到儲存變數中:
contract Foo { string private bar; constructor (string memory _bar) public { bar = _bar; } }
如果您需要其他智能合約可以訪問數據,請將儲存變數公開:
contract Foo { string public bar; constructor (string memory _bar) public { bar = _bar; } }
如果您不需要讀取數據的能力,而只是為了驗證它,請考慮僅儲存數據的雜湊值:
contract Foo { bytes32 public barHash; constructor (string memory _bar) public { barHash = keccak256 (bytes (_bar)); } }
甚至只傳遞雜湊以在部署時節省氣體:
contract Foo { bytes32 public barHash; constructor (bytes32 _barHash) public { barHash = _barHash; } }
希望這會有所幫助。