다른 계약에서 다른 함수를 호출하고 그 값을 반환하는 함수를 구현하려고합니다. 나는 이것이 이전 약속의 가치를 받기 전에 약속과 기능이 불려질 때 문제가 될 수 있다는 의혹을 가지고있다. 그러나 나는 당신이 계약서에 이것을 어떻게 구현할 수 있는지 그리고 그것이 가능한지에 대해서는 잘 모른다. 나는 Truffle, TestRPC 및 Solidity를 사용하여 계약서를 작성하고 트러플 단말기에서 함수를 호출합니다. 계약은 (보여주는 단지 최소한의 기능) 다음과 같이 :트러플 솔리드 - 다른 계약의 함수 호출
홈페이지 계약 :
// One (main) contract to control them all
import 'Company.sol';
contract Creator {
string[] public names;
address[] public companies;
// Creates a company
function createCompany(string _companyName, uint _noOfShares, uint _pricePerShare, address _creator) returns(address) {
address newCompany = new Company(_companyName, _noOfShares, _pricePerShare, _creator);
names.push(_companyName);
companies.push(newCompany);
return newCompany;
}
// Returns the name of a company given an index
function getName(uint i) constant returns(string companyName) {
return names[i];
}
// Returns the address of a company given an index
function getAddress(uint i) constant returns(address companyAddress) {
return companies[i];
}
// Returns the address of the last company created
function getLastAddress() constant returns(address companyAddress) {
return companies[companies.length - 1];
}
}
회사 계약
import 'Shareholder.sol';
contract Company {
mapping(address => address) public shareholders; //Mapping from user
account address to shareholder contract address
function getShareNo(address _user) constant returns (uint _amount){
// Get the shareholder contract address for the user
address sellerContractAddr = getShareholder(_user);
Shareholder sellerContract = Shareholder(sellerContractAddr);
uint shares = sellerContract.getShareBalance();
return shares;
}
function getShareholder(address _user) constant returns (address shareholder){
return shareholders[_user];
}
}
주주 계약 :
contract Shareholder {
uint public shareBalance;
// Function to return the share balance
function getShareBalance() constant returns (uint balance){
return shareBalance;
}
}
편집 : 롭의 반응과 더 많은 테스트 후에, 나는 이것이 ha가 아니라는 것을 깨닫는다. 약속과 관련이 있지만 창조주 계약에 의한 회사 계약의 인스턴스화가 있습니다. 트러 플에서 직접 배포 한 경우 Company.sol의 기능이 작동하지만 Creator에서 배포 한 경우에는 내가 언급 한 기능을 제외한 특정 기능 만 사용할 수 있습니다. 내 생성자 createCompany() 함수에서 아무 것도 잘못 볼 수 없다면 알려주십시오.
안녕하세요 롭, 답변 해 주셔서 감사합니다. 실제로 나는 게시물에서 언급 한 코드의 일부만 게시했습니다. 난 이미 당신이 게시 한 것과 비슷한 기능을 가지고 있지만 getShareNo() 함수를 호출 할 때 나는 사용자가 이미 주주라고 가정하고 그 주소로 테스트를한다. 각 사용자에 대한 계약 생성은 내가 믿어야하는 유스 케이스와 관련이 있습니다. 약속 및 콜백 팁에 감사드립니다! –