コントラクト間のデータ受け渡し
長文失礼します。
Ethereumに関する技術調査をしており、Solidityを使ったアプリケーションを作っているのですが、段階リリースを考慮して、コントラクトをデータと処理で分離したいと考えてます。
以下のようなイメージ
Web3.js ⇒ 処理コントラクト ⇒ データコントラクト
サンプルのソースでは、2つのコントラクトを使用して、処理ファイル(TestLogic)から、データファイル(TestData)のデータ(testId)を更新・参照しようと試みています。
上記とした場合、更新することはできるのですが、参照することができません。
- Web3.jsから、TestLogic.insertDataを実行すると、TestData.testIdが正常に更新される。
- Web3.jsから、TestData.getAを呼ぶと、戻り値「95」が返却される。
- Web3.jsから、TestLogic.getDataを呼ぶと、戻り値「0」が返却される。★失敗
以下の2点をご教授いただけると幸いです。
- Solidityで、コントラクト間で外部コントラクトのデータを参照することは可能なのか。
- コントラクトをデータと処理で分離するために、他に良い方法がないか。
TestLogic.sol
pragma solidity ^0.4.24;
// 呼び出す対象のコントラクトをimportする
import './TestData.sol';
contract TestLogic{
TestData public testData;
address public addressTestData;
// コンストラクタで、TestDataコントラクトのアドレスを受け取り、Objectを保持する。(デプロイ時)
constructor(address _testData) public{
require(_testData != 0x0);
addressTestData = _testData;
// アドレスからTestDataのObjectに変換
testData = TestData(_testData);
}
function insertData(uint32 id) public{
testData.insertData(id);
}
function getData() public view returns(uint32){
uint32 data = testData.getA();
return data;
}
}
TestData.sol
pragma solidity ^0.4.24;
contract TestData{
uint32 public testId;
constructor() public{
testId = 95;
}
function insertData(uint32 id) public{
testId = id;
}
function getA() public view returns(uint32){
return testId;
}
}