[Ethereum] Solidityの基礎構文 その1

$ 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 : 永続ストレージに配置されているものを一切参照しない

なるほど 分解すると分かりやすい