Go-Ethereum
是否可以在創世區塊中預載入合約?
這是我嘗試使用的設置:
一個 genesis.json,其 alloc 欄位設置為包含程式碼。
"alloc": { "0000000000000000000000000000000000000001": { "code": "6060604052608f8060106000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480634e70b1dc14604157806360fe47b114606257603f565b005b604c60048050506078565b6040518082815260200191505060405180910390f35b607660048080359060200190919050506081565b005b60006000505481565b806000600050819055505b5056" } }
然後執行 geth 並輸入(使用預設帳戶設置、解鎖和載入):
var getAndSetContract = eth.contract([{"constant":true,"inputs":[],"name":"num","outputs":[{"name":"","type":"uint256" }],"type":"function"},{"constant":false,"inputs":[{"name":"val","type":"uint256"}],"name":"set" ,"輸出":[],"類型":"函式"}]) var getAndSet = getAndSetContract.at("00000000000000000000000000000000000000001") getAndSet.set(2, {gas: 1000000}) 礦工.start() // 鑑於這是在一個私有測試區塊鏈上,一些塊很快就會滾進來 礦工.stop() getAndSet.num()
最終返回值為
3.054357634959941643970700719428062453954541146150392020568168920432276498019e+75
與想要的
2
以下是契約來源:
合約 getAndSet { 公共單位編號 函式集(uint val){ 數 = 值; } }
整個冒險是在 geth 源中遇到這條線後開始的:https ://github.com/ethereum/go-ethereum/blob/290e851f57f5d27a1d5f0f7ad784c836e017c337/core/genesis.go#L56我想我過去看到了一些關於預載入合約的東西,儘管我無法探勘任何東西。AFAIK 我可能會試圖利用一個半實現的功能。
你是如何建立你的契約的?如果您想將合約添加到創世塊,您需要使用
solc --bin-runtime
.預設情況下,用於創建合約的 solc 和 ide 之類的 remix 建構返回程式碼。此程式碼返回儲存在區塊鏈中的實際程式碼
您的方法不返回任何值。呼叫**set()**將返回呼叫事務的事務雜湊。您還需要指定部署交易的賬戶:
getAndSet.set(2, {eth.accounts[0], gas: 1000000});
(確保您在該帳戶上有足夠的餘額)。