$ truffle init
$ touch test/practice_test.js
const PracticeContract = artifacts.require("Practice"); contract("Practice", () => { it("has been deployed successfully", async() => { const practice = await PracticeContract.deployed(); assert(practice, "contract was not deployed"); }) })
artifacts.require(“*”) でコンパイル済みのコントラクトを読み込んで操作できる
$ touch contracts/Practice.sol
pragma solidity >= 0.4.0 < 0.7.0; contract Practice { }
migrationによってcontractがdeployされる
$ touch migrations/2_deploy_practice.js
const PracticeContract = artifacts.require("Practice"); module.exports = function(deployer) { deployer.deploy(PracticeContract); }
contract
pragma solidity >= 0.4.0 < 0.7.0; contract Practice { function hello() external pure returns(string memory) { return "Hello, World!"; } }
– hello : 関数
– external関数 : practice contactのインターフェイスの一部であり、他のコントラクトから呼び出せるが、コントラクトの中からは呼び出せない。external以外に、internal, public, privateがある。publicは他のコントラクトから呼び出せるし、内部でも呼び出せる。externalをpublicに変更しても結果は同じ。internalとprivateではオブジェクトやthisでは呼び出せない。
– pure, view: コントラクトの変数の状態を変更しない関数 pureはデータを読み込むことも書き込むこともできない viewは読み込むだけ
– memory : 永続ストレージに配置されているものを一切参照しない
なるほど 分解すると分かりやすい