스마트 계약 개발을위한 최고의 도구 (2 부)

개요 : 스마트 계약 개발을위한 최고의 도구 (Web3 및 Private ethereum Blockchain)

스마트 계약 개발을위한 다양한 도구 사용 : Remix, Web3 on TestRPC에 대한 KC TAM의 게스트 게시물입니다..

이 설정은 이전 설정과 매우 유사합니다. 차이점은 TestRPC를 사용하는 대신 로컬 호스트에서 실행되는 개인 이더 리움 블록 체인에 계약을 배포하는 것입니다..

노드 콘솔 부분은 거의 동일하지만 원하는대로 실행되기 전에 프라이빗 블록 체인에서 몇 가지 작업이 필요합니다. 블록 체인 초기화 및 블록 체인 실행, 계정 생성 및 채굴입니다. 이 모든 작업은 이전 세션에서 TestRPC에 의해 수행되었습니다..

1 부 : 스마트 계약 개발을위한 최고의 도구 

스마트 계약 개발 (2 부)

준비 : 이더 리움 클라이언트 (geth)

Ethereum 클라이언트에는 여러 가지 구현이 있습니다. 가장 인기있는 것은 Go 클라이언트 (geth라고 함)입니다. Geth 설치를 찾을 수 있습니다. 여기. 운영 체제에 맞는 것을 선택하십시오..

Genesis.json 파일

프라이빗 이더 리움 블록 체인 초기화에 사용되는 파일입니다. 나는 내가 사용하는 것을 보여줍니다.

{

"코인베이스" : "0x0000000000000000000000000000000000000001",

"어려움" : "0x20000",

"extraData" : "",

"gasLimit" : "0x4c4b40",

"목하" : "0x0000000000000042",

"Mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"타임 스탬프" : "0x00",

"할당": {},

"구성": {

"chainId": 15,

"homesteadBlock": 0,

"eip155Block": 0,

"eip158Block": 0

}

}

이미 가지고 있어야합니다. 이전 설정의 준비 세션을 참조하십시오. Node 및 Web3 모듈

프라이빗 이더 리움 블록 체인 설정

1. 블록 체인 초기화

여기에서는 간단한 설명과 함께이 데모에 적합한 단계를 나열합니다. 자세한 내용은 여기에서 찾을 수 있습니다. 위키.

작업 디렉토리를 엽니 다. 간단하게하기 위해 노드 모듈이 이미 설치된 이전 세션의 디렉토리를 사용합니다. genesis.json 파일이 여기에 보관되어 있는지 확인하십시오. 여기에 “chaindata”라는 디렉토리를 만듭니다. 이 디렉토리는 모든 블록 체인 정보와 사용자 계정을 보관합니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

이제부터는 다른 목적으로 화면을 세 개로 나눌 것입니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

이제 geth init로 블록 체인을 초기화합니다. 블록 체인을 저장하는 디렉토리의 datadir을 지정해야합니다..

블록 체인

$ geth –datadir = ~ // chaindata / init genesis.json

스마트 계약 개발을위한 최고의 도구 (2 부)

초기화 후 chaindata 디렉토리에 두 개의 디렉토리가 생성됩니다.

  • geth는 모든 블록 체인 관련 데이터를 보유합니다.
  • keystore는 사용자 계정 정보를 보유합니다 (현재 비어 있음)..

2. 블록 체인 시작

이제 블록 체인을 시작할 수 있습니다.

블록 체인

$ geth –datadir = ~ // chaindata / s.json

스마트 계약 개발을위한 최고의 도구 (2 부)

블록 체인이 실행 중입니다. 우리는이 터미널에서 블록 체인과 상호 작용하지 않습니다. 설정하는 동안이 터미널에 몇 가지 유용한 정보가 계속 표시되는 것을 볼 수 있습니다..

3. Geth 콘솔로 블록 체인에 액세스

geth 콘솔을 통해 시작한 블록 체인에 액세스 할 수 있습니다. 블록 체인 터미널의 마지막 줄에 유의하십시오. IPC 엔드 포인트가 열려 있습니다 (geth.ipc 파일의 경로). 우리는 콘솔에 액세스하기 위해 IPC 엔드 포인트를 사용합니다..

Geth 콘솔은 오른쪽 하단 터미널에 있습니다..

Geth 콘솔

$ geth attach ipc : /chaindata/geth.ipc

스마트 계약 개발을위한 최고의 도구 (2 부)

여기에 geth 콘솔이 있으며 여기에서 geth 명령을 실행할 수 있습니다..

4. 데모 용 계정 추가

이 개인 이더 리움 블록 체인이 초기화되면 계정이 없습니다. 이 데모에서는 4 개의.

첫 번째는 계약 배포 및 기능 실행을 담당하는 기본 계정입니다. 또한이 계정은 채굴을 담당합니다. 프라이빗 이더 리움 블록 체인에서는 블록을 채굴 할 누군가가 필요하기 때문입니다..

수익 공유를 증명하기 위해 3 개의 계정이 더 생성됩니다..

각 계정에는 의역 보호가 필요합니다..

Geth 콘솔

$ eth.accounts

$ personal.newAccount () // 네 번 반복

$ eth.accounts

그리고 chaindata / keystore의 디렉토리를 확인하면이 4 개의 계정이 모두 표시됩니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

여기에 계정이 있습니다. 나중에 참조하겠습니다..

"0x822539842f2d65f7f6e45ef913ab6eb226cd1056"

"0x57f6b66543c6a5650809f5ba2d3e0e808201fe8b"

"0xf1314446d331a023a95e6e5ff5302ccf7a73adec"

"0x595c788ba7b408afeee4cd4e359568dbcd5a5617"

5. 계정 잔액 확인

이제이 네 주소의 계정 잔액을 확인할 수 있습니다. 놀랍지 않습니다. 새로 생성 된이 계정에는 에테르가 없습니다..

Geth 콘솔

$ eth.getBalance (eth.accounts [0]) // 1, 2, 3으로 반복

스마트 계약 개발을위한 최고의 도구 (2 부)

6. 채굴

우리는 채굴이 어떻게 수행되는지 볼 준비가되었습니다. 프라이빗 이더 리움 블록 체인은 블록을 구축하기 위해 채굴이 필요합니다. genesis.json에서 매우 낮은 난이도를 설정했기 때문에 블록을 채굴하는 데 너무 많은 시간이 걸리지 않습니다. 블록 체인에 블록이 추가되면 5 개의 이더가 계정 [0] (이더베이스 또는 코인베이스 계정이라고도 함)에 보상됩니다..

첫 번째 블록은 시간이 걸릴 수 있습니다. 계정 잔액 [0]과 블록 체인 창 (오른쪽 상단 터미널)에 나타나는 내용을 살펴보면 채굴이 잘 작동하고 있음을 알 수 있습니다..

Geth 콘솔

$ miner.start ()

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

$ web3.fromWei (eth.getBalance (eth.accounts [0])) // weis를 ethers로 변환

스마트 계약 개발을위한 최고의 도구 (2 부)

모든 ether는 eth.accounts [0]로 이동하고 web3.fromWei를 사용하여 잔액을 wei에서 ether로 변환 할 수 있습니다. 그리고 언제든지 채굴을 중지하고 시작할 수 있습니다. 먼저 중지하고 나중에 계약을 배포하고 기능을 실행할 때 시작할 수 있습니다. (실생활에서는 일부 채굴자가 작업을 수행하며 채굴을 통해 에테르를 얻고 자하지 않는 한 혼자 채굴 할 필요가 없습니다.)

eth.accounts [0]에 대한 에테르가 있으며 계약 배포 및 함수 실행에 사용할 수 있습니다. 그리고 제 개인 블록 체인을 사용할 준비가되었습니다. 이제 우리는 계약 배포로 이동합니다..

계약 배포

절차는 이전 세션에서했던 것과 거의 동일합니다. 그러나 geth 콘솔에는 몇 가지 추가 작업이 있습니다..

1. 노드 콘솔 준비

왼쪽의 터미널 인 노드 콘솔에서 먼저 노드 콘솔에 액세스하고 프라이빗 체인에 액세스하기위한 web3 객체를 정의합니다..

노드 콘솔

$ 노드

> Web3 = require ( ‘web3’)

> web3 = new Web3 (new Web3.providers.HttpProvider ("http : // localhost : 8545"))

스마트 계약 개발을위한 최고의 도구 (2 부)

2. Geth 콘솔에서 RPC 켜기

프라이빗 블록 체인을 시작할 때 기본적으로 RPC (http : // localhost : 8545를 통해 액세스)는 꺼져 있습니다. geth 콘솔에서 켜야합니다..

Geth 콘솔

$ admin.startRPC ()

스마트 계약 개발을위한 최고의 도구 (2 부)

그리고 우리는 블록 체인 터미널에서이 메시지를 볼 수 있습니다 :

스마트 계약 개발을위한 최고의 도구 (2 부)

즉, 노드의 web3는 RPC를 통해 블록 체인에 액세스 할 수 있습니다. 이미 열려있는 TestRPC에는 필요하지 않습니다. 블록 체인을 시작할 때 RPC를 켤 수도 있습니다 (옵션 –rpc 사용)..

3. 노드 콘솔에서 블록 체인 액세스 테스트

이전에 생성 한 주소 확인.

노드 콘솔

> web3.eth.accounts

스마트 계약 개발을위한 최고의 도구 (2 부)

Geth 콘솔에서 생성 한 정확한 주소를 확인합니다..

4. 밸런스 핸디 기능 확인

동일한 checkAllBalances ()를 재사용합니다. 여기.

function checkAllBalances () {

var i = 0;

web3.eth.accounts.forEach (function (e) {

console.log (" web3.eth.accounts ["+나는+"] : " + 이자형 + " tbalance : " + web3.fromWei (web3.eth.getBalance (e), "에테르") + " 에테르");

i ++;

})

};

이 함수를 노드 콘솔에 복사하여 붙여 넣기 만하면됩니다. 이제 언제든지 checkAllBalances () 함수를 호출 할 수 있으며 이더에있는 모든 계정의 잔액을 표시합니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

균형이 맞습니다. 계정 [0]의 에테르는 채굴 때문입니다. 채굴 중에이 금액이 계속 증가하므로 이것을 언급하지 않을 것입니다. 현재 0 인 다른 세 계정의 잔액을 확인합니다..

5. 계약 배포

다시 말하지만, 우리는 이전에했던 일을 따르고 있습니다. 그리고 이전 세션의 정보를 복사합니다. 획득 방법은 이전 세션을 참조하십시오..

세 개의 대상 공유 계정을 보유하는 가변 주소 생성.

노드 콘솔

> var addresses = [web3.eth.accounts [1], web3.eth.accounts [2], web3.eth.accounts [3]];

> 구애

ABI를 기반으로 수익 공유 계약을위한 클래스 생성.

노드 콘솔

> var returnsharingContract = web3.eth.contract ([{"일정한":진실,"입력": [],"이름":"창조자","출력": [{"이름":"","유형":"주소"}],"지불 가능":그릇된,"stateMutability":"전망","유형":"함수"}, {"일정한":그릇된,"입력": [],"이름":"죽임","출력": [],"지불 가능":그릇된,"stateMutability":"지불 할 수없는","유형":"함수"}, {"일정한":진실,"입력": [],"이름":"num 주주","출력": [{"이름":"","유형":"uint256"}],"지불 가능":그릇된,"stateMutability":"전망","유형":"함수"}, {"일정한":진실,"입력": [{"이름":"","유형":"uint256"}],"이름":"주주","출력": [{"이름":"","유형":"주소"}],"지불 가능":그릇된,"stateMutability":"전망","유형":"함수"}, {"일정한":그릇된,"입력": [],"이름":"shareRevenue","출력": [{"이름":"성공","유형":"부울"}],"지불 가능":진실,"stateMutability":"지불 가능","유형":"함수"}, {"입력": [{"이름":"구애","유형":"주소[]"}],"지불 가능":그릇된,"stateMutability":"지불 할 수없는","유형":"건설자"}, {"익명의":그릇된,"입력": [{"색인":그릇된,"이름":"_양","유형":"uint256"}, {"색인":그릇된,"이름":"_num 주주","유형":"uint256"}],"이름":"지불","유형":"행사"}]);

지금까지 우리는 아직 프라이빗 블록 체인에 아무것도 배포하지 않았습니다. 따라서 채굴이 필요하지 않습니다. 계약 배포에는 가스가 필요하므로이 계약을 배포하기 위해 accounts [0]을 사용하므로 eth.accounts [0]의 잠금을 해제해야합니다. geth 콘솔에서 수행됩니다..

Geth 콘솔

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

스마트 계약 개발을위한 최고의 도구 (2 부)

시간 초과로 인해 계정 잠금을 해제하라는 메시지가 표시되는 경우이 작업을 다시 수행해야합니다..

이제 바이트 코드와 필요한 정보로 계약을 배포 할 수 있습니다..

노드 콘솔

> var 수익 공유 = 수익 공유 Contract.new (

구애,

{

출처 : web3.eth.accounts [0],

데이터 : ‘0x6060604052341561000f57600080fd5b60405161049d38038061049d833981016040528080518201919050506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508151600281905550600090505b81518110156100f957818181518110151561009157fe5b906020019060200201516001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061007a565b50506103938061010a6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302d05d3f1461007257806341c0e1b5146100c757806368eca613146100dc578063ab377daa14610105578063e579a0bd14610168575b600080fd5b341561007d57600080fd5b61008561018a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100d257600080fd5b6100da6101af565b005b34156100e75760008 0fd5b6100ef610240565b6040518082815260200191505060405180910390f35b341561011057600080fd5b6101266004808035906020019091905050610246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610170610279565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b60025481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006002543481151561028b57fe5b049150600090505b60025481101561031d576001600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673fffffffffffff fffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561031057600080fd5b8080600101915050610293565b7f9c26340b8d01b4e039192edfd25f4a56ed070d45afe866b8685658b1ed3cd74d34600254604051808381526020018281526020019250505060405180910390a1600192505050905600a165627a7a72305820f0e717ba935e00c43896cc9266a85af91a519061c044503be0a52b93f721d1610029 ‘,

가스 : ‘4700000’

}, 함수 (e, 계약) {

console.log (e, 계약);

if (typeof contract.address! == ‘undefined’) {

console.log ( ‘계약 채굴! 주소 :’+ contract.address + ‘transactionHash :’+ contract.transactionHash);

}

})

0])

이전 세션과 달리 트랜잭션이 이미 블록 체인 터미널에 표시되지만 아직 채굴되지 않은 것을 볼 수 있습니다. 노드 콘솔의 메시지가 아직 관찰되지 않았습니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

이제 geth 콘솔에서 마이닝을 켜야합니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

채굴을 켜면 곧 일부 블록이 채굴되고 노드 콘솔에서도 계약이 성공적으로 배포되었음을 보여주는 메시지가 나옵니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

배포 된 계약과 상호 작용

이전 세션과 유사하게 배포 된 계약은 개체 수익 공유를 통해 액세스됩니다..

1. 공용 변수 조사

공개 변수를 조사하는 데는 가스가 필요하지 않으므로이를 수행하기 위해 계정을 잠금 해제하고 채굴 할 필요가 없습니다..

스마트 계약 개발을위한 최고의 도구 (2 부)

2. shareRevenue () 함수 실행

함수를 실행하려면 트랜잭션 비용과 채굴이 필요하므로 먼저 geth 콘솔에서 둘 다 시작할 수 있습니다..

함수를 실행하는 명령은 동일합니다. 이전 세션에서와 마찬가지로 명령 전후의 균형을 확인합니다..

노드 콘솔

> checkAllBalance ()

> 매출 공유 .shareRevenue ({from : web3.eth.accounts [0], 값 : web3.toWei (30), 가스 : 4700000});

> checkAllBalance ()

스마트 계약 개발을위한 최고의 도구 (2 부)

우리는 원하는 결과를 얻었습니다. 계정 [0]의 30 개 이더는 이제 계정 [1]에서 계정 [3]으로 분배됩니다. 채굴로 인해 새로운 이더가 들어 오므로 계정 [0]을 확인할 수 없습니다..

요약

우리는 다시 노드 콘솔을 통해 web3을 사용하여 계약을 배포하고 상호 작용했습니다. 이번에는 사설 이더넷 블록 체인에서 수행합니다. 전체 프로세스는 노드 콘솔 측에서 거의 동일하지만 전체 프로세스를 완료하려면 계정 생성, 계정 잠금 해제, 채굴 등을 처리해야합니다. TestRPC는 이러한 작업을 모두 수행하므로 TestRPC에서는 필요하지 않습니다..

다음에 우리는 사용자 인터페이스 인 MIST에서 작업하고 다시 개인 이더 리움 블록 체인에서 상호 작용할 것입니다..

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
map