$ 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 : 永続ストレージに配置されているものを一切参照しない
なるほど 分解すると分かりやすい