マックは、イーサネット広場、リミックス-IDEおよびスマート予備契約をインストール

マックは、イーサネット広場、リミックス-IDEおよびスマート予備契約をインストール

前提条件

  • インストール済みのBREW
    BREWは、Mac上のソフトウェアのapt-getは、のような、簡単なインストールと同様です。
  • インストールgolang
    私はいくつかの時間を無駄にコンパイルされたコードをダウンロードするのに使用される、それがアップグレードのより強力なバージョンと推定されます。使用することはできません。直接新しい醸造インストールgolangと。

インストールGETHステップピット

最初は直接イーサネットBREWワークショップ環境にインストールするには、オンラインの指示に従うようになりました。

brew tap ethereum/ethereum
brew install ethereum 

インストール中に問題ありません、悲しい物語は、インストールが完了し、実行されていることではありません。

geth version

試験した場合、我々は違法、実行できない実行可能ファイルを言われました。それは、問題のこのバージョンと思われ、それをグーグルは至らなかったが、私が出会った一人以上。
インストールしたばかりのアンインストールの事:

brew uninstall ethereum

その後、やり直すクローンのgitに直接コードをコンパイルします。

git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make geth

問題ありません。コンパイル、実行後

./build/bin/geth version

Geth
Version: 1.9.7-unstable
Git Commit: 0ce5e113be8c54c7c30a3a797827114adb0df19c
Git Commit Date: 20191102
Architecture: amd64
Protocol Versions: [64 63]
Network Id: 1
Go Version: go1.13.4
Operating System: darwin
GOPATH=/Users/xxxxx
GOROOT=/usr/local/Cellar/go/1.13.4/libexec

いいえ問題の記述ない、など/ユーザー/ local / binの実行可能ディレクトリにGETHリンク環境:

ln -s /xxxx/build/bin/geth /user/local/bin/geth

それはGETHはどこかにエーテル広場をスタート行うことができます。

初期設定の作成ゾーン

作成は、最初のブロックを初期化する必要があります。次のように、genesis.jsonファイル:プロジェクトディレクトリとして新しいディレクトリを作成し、ディレクトリにという名前のファイルを作成します。

{
    "nonce": "0x0000000000000042",
    "difficulty": "0x020000",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
    "gasLimit": "0x4c4b40",
    "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "alloc": {}
}

特定のあなたは私にはわからない何を意味しています。見つけるためにオンラインであるほとんどある程度のを見つけ、これは、同じファイルです。私はちょうど使用します。
このファイルは、ブロックの作成を初期化するために使用されます。

geth init ./genesis.json --datadir ./mychain
WARN [03-21|09:54:38] No etherbase set and no accounts found as default
INFO [03-21|09:54:38] Allocated cache and file handles         database=/Users/jianjiangwang/Desktop/mychain/chain/geth/chaindata cache=16 handles=16
INFO [03-21|09:54:38] Successfully wrote genesis state         database=chaindata                                                 hash=ee3898…ae7194
INFO [03-21|09:54:38] Allocated cache and file handles         database=/Users/jianjiangwang/Desktop/mychain/chain/geth/lightchaindata cache=16 handles=16
INFO [03-21|09:54:38] Successfully wrote genesis state         database=lightchaindata

パラメータは--datadir ./mychain、ディレクトリに格納されたデータブロックを指定するために使用されます。開くmychainディレクトリを、あなたは見ることができgeth、ディレクトリとkeystoreディレクトリを。作成領域の初期化は成功と見なすことができます。

プライベートチェーンを開始

オンラインで開始するには、2つの方法がある、と述べました。

geth --datadir ./mychain --nodiscover console 2>>eth_output.log

パラメータ:

  • -datadir:指定したブロックチェーン・データ・ネットワーク
  • コンソール:あなたはGETHでコマンドを実行することができ、コマンドラインモードを開始します
  • -nodiscover:チェーンプライベートとして指定され、オンラインに見られることはありません
  • >> eth_output.log:現在のフォルダに出力ファイルを記録するためにeth_output.log表明

実行はtail -f eth_output.log、あなたが出力ログを見ることができます。
このメソッドは、コマンドラインをテストするために実行することができ、開始します。

  • 第二の方法
    を実行するには:
geth --networkid 10 --datadir ./mychain --rpc --rpcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3" --rpcaddr "0.0.0.0" --rpccorsdomain "*" --nodiscover --dev console>>eth.log

その後、別の端末を開き、次のコマンドを入力します。

geth attach "http://127.0.0.1:8545"

スクエアイーサネットターミナル進みます。
この方法を開始し、入学Fiが開かれた後、リミックス-IDEの後ろに、そして、契約を出版、オンライン、このモデルのニーズを設置。

どちらも、通常の起動モードです。起動したら、このチェーンは、ことがわかります鉱業ませんテストされていない多くのことには何の採掘ありません。結局のところ、イーサネット・スクエアは、どの取引がガスを消費する必要があります。
採掘されていない理由は、トランザクションが採掘されます場合にのみ送信されるようにと言われています。
ことわざを見つけ、情報を見つけるために続行:新しいバージョンの-devモデルパラメータは、新しいアイテムを追加します。

--dev               Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled
--dev.period value  Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)

以前のバージョンのように長いプラスとと言われ--devますがで実行することができますminer.start()マイニング。とにかく、私は直接ダウンロード最新バージョンは仕事、リターンの実装はありませんnull、この説明によると、トランザクションが発生した唯一の唯一の鉱山です。しかし、私は、彼らはガスを持っていないしていない私に教えて、トランザクションを送りました。私は、イーサネット通貨を取得することはありませんので。その他には、構成作成領域のJSONファイルの実際の操作は、必要とするかもしれない知らないalloc、それのデフォルトの初期イーサネット通貨アカウントを設定するためのパラメータが。

そう、できるだけ早く私をテスト起動パラメータを変更するためには、彼が採掘を始めましょう。

geth --datadir ./mychain --nodiscover --dev --dev.period 1 console 2>>eth_output.log

起動したら、テストアカウントを築いてきましたでしょう、パスワードは空です。そして、それは組み込まれているお金のイーサネット膨大な量。実際には、関係なく、鉱業の、唯一の-devパラメータを持っているならば、それはテストモードを開始します、イーサネット大規模な通貨とデフォルトのアカウントがあります。しかし、サービスがシャットダウンされるたびに初期状態を再起動します。

いくつかの一般的に使用されるコマンドのテスト

開始gethコマンドコンソール入力検証試験後。
現在のアカウントを表示します。

> web3.eth.accounts

アカウントを作成し、あなたが作成するときにパスワードを設定する必要があります。

> web3.personal.newAccount('123456')
"0xdaa65af5d348c25266a5588148a9c0e9e4c056f8"

パスワードを入力し、アカウントが長いリストから返されます。
次に、実行web3.eth.accountsコマンドを、あなたが複数のアカウントを見ることができます。
スタート鉱業:
鉱業アカウントの最初のセット:

> miner.setEtherbase("0xdaa65af5d348c25266a5588148a9c0e9e4c056f8")

すでにアカウントを既存の長い文字列の内部。
また:

miner.setEtherbase(eth.accounts[0])

リストの最初のアカウントを取得します。
これを行うことができます。

>eth.coinbase

鉱業アカウントの現在の設定を参照してくださいされています。
スタートマイニング:

>miner.start()

ストップマイニング:

>miner.stop()

口座残高を表示します。

web3.eth.getBalance(eth.accounts[0])

ETHはウェイ、1個のエーテル= 1E18ウェイ最小単位であります

転送を開始します。アカウントのロックを解除するには、転送の必要性の前に:

personal.unlockAccount(eth.accounts[0])
personal.unlockAccount(eth.accounts[1])

ロック解除した後、転送を行います。

amount = web3.toWei(5,'ether')
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})

0から1アカウントアカウントイーサネットに5枚のクレジットを切り替えます。
ロックされたアカウント:

personal.lockAccount(eth.accounts[0])
personal.lockAccount(eth.accounts[1])

ここでは、イーサネット広場テスト環境の基本的なインストールは完了です。

インテリジェントリミックスソリディティIDEのインストール・契約

このことは、ピットのいっぱいです。この事はnodejs環境を必要とします。まずnodejsでは、ボトルを醸造、私の試みで、バージョン番号は無数のページを探して、繰り返しステップピットの後に、必要です。そして最後に、それらをインストールします。
基本的な環境要件:

$ node -v
v7.10.1
$ npm -v
4.2.0

また、8ありますが、ラインを持つノードが、私は試していないと述べました。NPMバージョンではほとんど効果を感じますが、いくつかの発言も関係です。私はもともと6.xでは、一緒に落下します。
ノードのバージョンがあまりにも複雑であるが、幸い、nはバージョン管理ツールを提供します。まずインストール:

npm install -g n

その後、ノードnに必要なバージョンを指定することができます。

sudo n 7.10.1

簡単にノードのバージョン番号を指定することができ、コンピュータのノードバージョンがニーズに合わせて調整します。
ライン上で自分自身のNPMバージョン直接NPM指定します。

npm install npm@4 -g

ノードの他のバージョン、何度も試みたが、直接NPMコードをインストールしたりダウンロードは、gitのからコンパイルされたすべての主に、失敗している[email protected]このようなものがインストールされていません。ノードのバージョンを更新した後、ソースコードのコンパイルは成功しません。あなたは、コンパイルにソースコードをダウンロードしようとすることができます。

git clone https://github.com/ethereum/remix-ide.git
cd remix-ide
npm install
npm start

私は、NPMによって直接インストールされています。ただし、インストールプロセスのエラーは、見つけることができないnpx実行パスを。
最初の実行:

npm install npx

など/ユーザー/ local / binに実行ディレクトリに続いてNPXリンク:

ln -s /usr/local/Cellar/node/12.7.0/bin/npx npx

おそらく私は、後に置き換えられ、Nバージョンが最初のノードは、12.7であったが、私はまだ12.7.0のディレクトリに、インストールNPMによって新しいパッケージを見たので。scryptsyのscrypt.js

npm install remix-ide -g
remix-ide

しかし、エラーを実行しているときに!
おそらく、このエラー:

module.js:442
    throw err;
    ^
Error: Cannot find module './build/Release/scrypt'
    at Function.Module._resolveFilename (module.js:440:15)
    at Function.Module._load (module.js:388:25)
    at Module.require (module.js:468:17)

この憂鬱。同様のエラーに関する情報を見つけるために続けます。個別にインストールされていますscrypt

npm install -g scrypt

インストール後は、モジュールパスのリミックスをインストールするには:

/usr/local/lib/node_modules/remix-ide/node_modules/scrypt/build/Release

比較scryptが個別にインストール、ファイルが少ないました。以上、この文書リンクに個別にインストールしたディレクトリから:

link -s /usr/local/Cellar/node/12.7.0/lib/node_modules/scrypt/build/Release/scrypt.node scrypt.node

もう一度実行してremix-ide、それが行われています:

$ remix-ide
setup notifications for /Users/arthurlee/program/ethereum/mychain
Starting Remix IDE at http://localhost:8080 and sharing /Users/arthurlee/program/ethereum/mychain
Tue Nov 05 2019 11:35:45 GMT+0800 (CST) Remixd is listening on 127.0.0.1:65520

お使いのブラウザを開いて、入力しhttp://localhost:8080たアドレスを:

インテリジェントオーサリングとパブリッシング契約

gethそして、remix-ideすべてがインストールされた後、開始geth第二のアプローチで開始することを忘れないでください。お使いのブラウザを開き、インタフェースを開発する契約を入力します。いくつかの例がありました。のは、よりシンプルに従事してみましょう:

pragma solidity ^0.4.18;
contract HelloWorld {
    string msg1;
    
    function HelloWorld(string _msg) public {
        msg1 = _msg;
    }

    function say() constant public returns (string) {
        return msg1;
    }
}

别的我还没细看。但就发现了一个很讨厌的事情pragma solidity ^0.4.18;这个,声明了这个合约用什么版的solidity来编写。简单了找了一下,居然没有完整的说明这个这个版本是如何定义的,可能是某种常态吧。但我是不相信这些程序能版本兼容的。至少我看到0.4和0.5的就很大不一样了。管他,按照这个例子来做。

左边工具栏第二个是浏览文件。点+符号。新建一个合约。起个文件名。把合约内容复制过去。

左边工具栏第三个是编译。在Compiler选择和合约对应的版本。进行编译。如果有错,在下面会显示错误信息。没错就啥都不显示了。

最先面的Details,可以看到这个合约被编译之后的内容。其中的WEB3DEPLOY部分应该就是可以复制出来部署的。这部分内容如下:

var _msg = /* var of type string here */ ;
var helloworldContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_msg","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var helloworld = helloworldContract.new(
   _msg,
   {
     from: web3.eth.accounts[0], 
     data: '0x6060604052341561000f57600080fd5b6040516102b83803806102b8833981016040528080518201919050508060009080519060200190610041929190610048565b50506100ed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008957805160ff19168380011785556100b7565b828001600101855582156100b7579182015b828111156100b657825182559160200191906001019061009b565b5b5090506100c491906100c8565b5090565b6100ea91905b808211156100e65760008160009055506001016100ce565b5090565b90565b6101bc806100fc6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063954ab4b214610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc61017c565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101725780601f1061014757610100808354040283529160200191610172565b820191906000526020600020905b81548152906001019060200180831161015557829003601f168201915b5050505050905090565b6020604051908101604052806000815250905600a165627a7a723058201893c1926120c368172f8f8211f6e1a723f12b417d25c83f4982b31ce3ca1d210029', 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

其中,第一行的内容需要自己修改:

var _msg = /* var of type string here */ ;

后面注释部分改成需要的显示的内容,比如hello world
还可以改:

from: web3.eth.accounts[0], 

表示那个账户来执行这个合约。
按说可以把这段内容复制下来到控制终端直接黏贴过去发布合约的。黏贴的时候,一行就应该相当于一个命令,会返回好几次undefined。不用管。
最后如果显示:

Contract mined! address: 0x461b37e377da6ff6d73bef4c29142e160a1e4eeb transactionHash: 0x44b68decc1b692369b003cdd6c547b703546274a00653af81015a3ed843476dc

就算发布成功了。
对应账号的以太币会减少。但此时不一定能执行,需要等若干区块建立之后才能确认,做法就是执行转账了,执行十来次转账之后,然后执行:

helloworld.say()

应该能成功。

也可以直接用remix-ide来发布。

选择左边工具栏第四个,部署和运行。
先选择环境,选择Web3 Provider。会弹出一个窗口,让输入geth的地址和端口。我没有改,默认的。

http://localhost:8545

如果有问题连不上,会报错,但错误信息一闪而过。如果没问题,下面的Account会列出来当前节点可以控制的账号。选择一个相当于修改了

from: web3.eth.accounts[0], 

再下面,选择Gas啥的。在下面Deploy边上的输入框,随便输入点东西,相当于修改了

var _msg = /* var of type string here */ ;

但一定要记住,两边用双引号圈起来。否则部署的时候会报错:

Unexpected token h in JSON at position 1

点一下Deploy,开始部署。完成会显示类似信息:

[block:555 txIndex:0]from:0xcbb...b29dfto:HelloWorld.(constructor)value:0 weidata:0x606...00000logs:0hash:0x3ec...e23f9


就可以运行了。

哪个终端发布的合约,只能在自己终端来执行。换个终端无法执行。如果要在其他终端执行,需要拿出合约地址和abi。
在remix-ide部署的时候,从右下角的Debug边上的下拉箭头,点开,找到部署地址。然后在编译详情里面,复制出abi。
在这里插入图片描述
然后,去掉回车空格tab之类的,执行:

abi=[{"inputs": [{"name": "_msg","type": "uint256"}],"payable": false,"stateMutability": "nonpayable","type": "constructor"},{"constant": true,"inputs": [],"name": "say","outputs": [{"name": "","type": "uint256"}],"payable": false,"stateMutability": "view","type": "function"}]

=后面的内容就是复制出来的abi。
然后执行:

tt=eth.contract(abi).at("0x692a70D2e424a56D2C6C27aA97D1a86395877b3A")

长串的就是合约地址。之后就可以执行这个合约:

tt.say()

但我怎么看都有问题,如果合约返回的是uint256,一直返回0,其实我设置的参数是2.
如果是字符串,则直接报错:

Error: new BigNumber() not a base 16 Numver:

查了一下,应该是web3的bug。后学再看。

其他

给某个账号发布合约有可能说这个账户没有解锁。解锁的时候,会显示:

Error: account unlock with HTTP access is forbidden

如果这样,就在启动geth的时候增加如下参数:

--allow-insecure-unlock
发布了20 篇原创文章 · 获赞 7 · 访问量 2497

おすすめ

転載: blog.csdn.net/cfy_fantasyxx/article/details/102921366