太坊プライベートチェーンでインテリジェント契約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