【Blockchain】 SmartContract를 수동 컴파일하여 로컬 환경 (Ganache)에 배포 및 테스트
SmartContract
를 개발하기 위한 프레임워크Truffle.js
등이 있습니다만, 이번은, 구조를 이해하기 위해서 수동으로 컴파일해 Bytecode
와 ABI
(Application Binary Interface)를 취득합니다.그런 다음 로컬 환경의
Blockchain
네트워크에 배포 및 테스트합니다.Bytecode와 ABI에 관하여
Bytecode
(바이트 코드)는 블록 체인에 올리기 위한 SmartContract
바이너리 코드입니다. EVM
(Ethereum Virtual Machine) 가상 시스템에서 실행됩니다.ABI
(Application Binary Interface)는 Bytecode
기능 및 입력 및 출력과 같은 정보를 Json
형식으로 설명합니다. ABI
를 보면 SmartContract
에 어떤 기능을 가지고 있는지 알 수 있습니다.컴파일하는 파일들
MyProkject/
├─ .vscode
│ └─ settings.json
├─ contracts
│ └─ SampleContract.sol
└─ scripts
└─ compile.js
/.vscode/settings.json
에 대한 자세한 내용은 이 기사을 참조하십시오. /contracts/
폴더에 개발할 SmartContract
프로그램을 넣습니다. 이 예에서는 SampleContract.sol
를 넣었습니다. /scripts/compile.js
에는 컴파일을 위한 Javascript
에 설명된 스크립트가 들어 있습니다. compile.js
// ライブラリのインポート
const path = require('path'); // ファイルパスを操作するためのライブラリ
const fs = require('fs'); // ファイルを読み書きするためのライブラリ
const solc = require('solc'); // Solidity言語のプログラムをコンパイルするためのライブラリ
const chalk = require('chalk'); // ログ出力に色をつけるためのライブラリ
// プログラムファイルのパスを設定
const contractPath = path.resolve(__dirname, "../contracts", "SampleContract.sol");
// プログラムファイルを読み込む
const source = fs.readFileSync(contractPath, 'utf8');
// プログラムをコンパイルし、Bytecode と ABI を取得する
const {abi, bytecode} = solc.compile(source, 1).contracts[':SampleContract'];
// Bytecode と ABI をログ出力する
console.log(chalk.green(bytecode));
console.log(chalk.cyan(abi));
컴파일
터미널에서 프로젝트 경로를 열고 다음 명령을 실행합니다.
node ./scripts/compile.js
그러면 컴파일이 수행되고 로그에 녹색으로
Bytecode
와 청록색으로 ABI
가 출력됩니다.하지만 이것이라면
Bytecode
와 ABI
를 로그 출력 할 뿐이므로 다음은 로컬 환경에 Blockchain
개발용 네트워크 환경을 구축하고 거기에 개발한 SmartContract
를 배포하고 싶다고 생각합니다.Ganache
Ganache
는 Blockchain
개발을 위한 네트워크 환경입니다.h tps : // t 루 f ぇ 라메를 rk. 코 m / 가나치
BLOCKS
탭을 클릭하면 네트워크에 유지되는 Blockchain
가 표시됩니다. 처음에는 시작 블록BLOCK 0
만 존재합니다. 이 블록은 Block Genesys
라고도 합니다. Deploy & Test
npm install --save-dev mocha@{バージョン}
/scripts/compile.js
를 다음과 같이 변경합니다. compile.js
// ライブラリのインポート
const path = require('path'); // ファイルパスを操作するためのライブラリ
const fs = require('fs'); // ファイルを読み書きするためのライブラリ
const solc = require('solc'); // Solidity言語のプログラムをコンパイルするためのライブラリ
// プログラムファイルのパスを設定
const contractPath = path.resolve(__dirname, "../contracts", "SampleContract.sol");
// プログラムファイルを読み込む
const source = fs.readFileSync(contractPath, 'utf8');
// プログラムをコンパイルし、外部へ export する
module.exports = solc.compile(source, 1).contracts[':SampleContract'];
/test/SampleContract.test.js
를 만듭니다. SampleContract.test.js
// ライブラリのインポート
const assert = require('assert'); // テスト assert をするためのライブラリ
const Web3 = require('web3'); // ローカル環境(Ganache)と接続するためのライブラリ
// ローカル環境(Ganache)と接続するためのオブジェクトを生成
const provider = new Web3.providers.HttpProvider("HTTP://127.0.0.1:7545");
const web3 = new Web3(provider);
// コンパイルスクリプトからBytecodeとABIを取得する
const {abi, bytecode} = require('../scripts/compile');
// 変数定義
let accounts; // Ganacheで提供される10アカウントを保持する
let sampleContract; // デプロイしたSmartContractを保持する
// 各テストを実行する前に実行する
beforeEach(async() => {
// アカウントを取得する
accounts = await web3.eth.getAccounts();
// ABIとBytecodeを一番最初のアカウントを使ってデプロイ
usersContract = await new web3.eth.Contract(JSON.parse(abi)) // ABI
.deploy({data: bytecode}) // Bytecode
.send({from: accounts[0], gas: '1000000'}); // 一番最初のアカウント、GAS=1000000
});
// テスト 'The UsersContract' 開始
describe('The UsersContract', async() => {
// 1つ目のテスト: デプロイできたか?
it('should deploy', () => {
console.log(usersContract.options.address);
assert.ok(usersContract.options.address);
});
});
/package.json
의 "test": "mocha"
로 한다. {
"name": "myproject",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha"
},
"author": "",
"license": "ISC",
"devDependencies": {
"chalk": "^2.4.2",
"mocha": "^5.2.0",
"solc": "^0.4.24",
"web3": "^1.0.0-beta.35"
}
}
npm run test
> [email protected] test /myproject
> mocha
The UsersContract
0xdabBD1955e2873bB498A6F1f149A8A0d74f48170
✓ should deploy
1 passing (72ms)
Ganache
의 TRANSACTIONS
탭에서 SmartContract
를 배포했는지 확인할 수 있습니다. Reference
이 문제에 관하여(【Blockchain】 SmartContract를 수동 컴파일하여 로컬 환경 (Ganache)에 배포 및 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toshiok/items/4ed39f84e95b3a434477텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)