太坊プライベートチェーンでインテリジェント契約macを構築
太坊プライベートチェーンでインテリジェント契約macを構築
コンパイル環境:
solidityコンパイラのインストール(インテリジェント契約コンパイラ)
brew tap ethereum/ethereum
brew install solidity
これによりsolidityの最新バージョンに直接ダウンロードされます.
特定のバージョンのSolidityが必要な場合は、GithubからHomebrew formulaをインストールする必要があります.solidityを調べてrb commits on Githubの提出記録はsolidityを含むrbファイル変更の特殊提出.次にbrewを使用してインストールします.brew unlink solidity
# Install 0.4.8
brew install https://raw.githubusercontent.com/ethereum/homebrew-ethereum/77cce03da9f289e5a3ffe579840d3c5dc0a62717/solidity.rb
以下、solidity 0.7.0のバージョンを例に挙げます。バージョンが異なる場合、コンパイルと構文の違いがある可能性があります。
インテリジェント契約の作成
1、gethディレクトリの下にcontractフォルダを新規作成します.後ろにチェーンを付けるのに便利です.このgethディレクトリとは、初期ブロックが作成されたディレクトリを指します.例えばgeth init./genesis.json --datadir ./mychain.ディレクトリはdatadirが指すmychainディレクトリです.
2、contractフォルダにdemoを新規作成します.solインテリジェント契約、内容は以下の通りです.pragma solidity ^0.7.0;
contract Demo {
string text = "Hello World!";
function say() view public returns (string memory){
return text;
}
}
3、コンパイル>solc -o . --bin --abi demo.sol
>ll
total 24
-rw-r--r-- 1 hpy staff 135B 8 13 11:10 Demo.abi
-rw-r--r-- 1 hpy staff 1.3K 8 13 11:10 Demo.bin
-rw-r--r-- 1 hpy staff 144B 8 13 11:09 demo.sol
Demoを生成します.abiとDemobin 2ファイル
4、生成したファイルを修正し、gethにロードさせる
Damo.abiファイルの内容をvar demoContract = eth.contract([{"inputs":[],"name":"say","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}])
新規追加var demoContract = eth.contract()
Demo.binファイルの内容をpersonal.unlockAccount(eth.accounts[0]) // , ,
var demo = demoContract.new({
from:eth.accounts[0],
data:"0x60806040526040518060400160405280600c81526020017f48656c6c6f20576f726c642100000000000000000000000000000000000000008152506000908051906020019061004f929190610062565b5034801561005c57600080fd5b506100ff565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b5b808211156100fb5760008160009055506001016100e3565b5090565b61018b8061010e6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063954ab4b214610030575b600080fd5b6100386100b3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561007857808201518184015260208101905061005d565b50505050905090810190601f1680156100a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561014b5780601f106101205761010080835404028352916020019161014b565b820191906000526020600020905b81548152906001019060200180831161012e57829003601f168201915b505050505090509056fea26469706673582212202dc1950f91138cc1af1f78f6514e8712e7a370461184d5ebe1c5582f0615fac564736f6c63430007000033",
gas:500000
})
元の内容は0 xを加えてdataの後に置きます
インテリジェント契約上のプライベートチェーン
作成したプライベートチェーンに入ります.gethコマンドの下:> loadScript("contract/Demo.abi")
undefined
> loadScript("contract/Demo.bin")
undefined
チェーンアップが成功したかどうかを確認> demo
{
abi: [{
inputs: [],
name: "say",
outputs: [{...}],
stateMutability: "view",
type: "function"
}],
address: undefined,
transactionHash: "0x7aeec8a912a384d5fd7f9fcbf218eb26341cdda2e6bd814e0027fe4867733265"
}
上記のように戻ると成功します
掘削を始める> miner.start()
null
コマンドを入力してください.ブロックNumberはブロック数が増加しているかどうかを知ることができ、掘削中かどうかを判断することができる.> demo.say
function()
> demo.say.call()
"Hello World!"
契約メソッドの呼び出しに成功しました!!!happy
へいさくっさく>miner.stop()
null
brew tap ethereum/ethereum
brew install solidity
brew unlink solidity
# Install 0.4.8
brew install https://raw.githubusercontent.com/ethereum/homebrew-ethereum/77cce03da9f289e5a3ffe579840d3c5dc0a62717/solidity.rb
pragma solidity ^0.7.0;
contract Demo {
string text = "Hello World!";
function say() view public returns (string memory){
return text;
}
}
>solc -o . --bin --abi demo.sol
>ll
total 24
-rw-r--r-- 1 hpy staff 135B 8 13 11:10 Demo.abi
-rw-r--r-- 1 hpy staff 1.3K 8 13 11:10 Demo.bin
-rw-r--r-- 1 hpy staff 144B 8 13 11:09 demo.sol
var demoContract = eth.contract([{"inputs":[],"name":"say","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}])
personal.unlockAccount(eth.accounts[0]) // , ,
var demo = demoContract.new({
from:eth.accounts[0],
data:"0x60806040526040518060400160405280600c81526020017f48656c6c6f20576f726c642100000000000000000000000000000000000000008152506000908051906020019061004f929190610062565b5034801561005c57600080fd5b506100ff565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b5b808211156100fb5760008160009055506001016100e3565b5090565b61018b8061010e6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063954ab4b214610030575b600080fd5b6100386100b3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561007857808201518184015260208101905061005d565b50505050905090810190601f1680156100a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561014b5780601f106101205761010080835404028352916020019161014b565b820191906000526020600020905b81548152906001019060200180831161012e57829003601f168201915b505050505090509056fea26469706673582212202dc1950f91138cc1af1f78f6514e8712e7a370461184d5ebe1c5582f0615fac564736f6c63430007000033",
gas:500000
})
> loadScript("contract/Demo.abi")
undefined
> loadScript("contract/Demo.bin")
undefined
> demo
{
abi: [{
inputs: [],
name: "say",
outputs: [{...}],
stateMutability: "view",
type: "function"
}],
address: undefined,
transactionHash: "0x7aeec8a912a384d5fd7f9fcbf218eb26341cdda2e6bd814e0027fe4867733265"
}
> miner.start()
null
> demo.say
function()
> demo.say.call()
"Hello World!"
>miner.stop()
null