2つの基本契約があります.1つはトークン用で、もう1つは販売用です。別の契約の中で契約のインスタンスを作成し、そのメソッドを呼び出すと例外がスローされます
トークンсontract:
contract MyToken is StandardToken, Ownable {
string public constant name = "My Sample Token";
string public constant symbol = "MST";
uint32 public constant decimals = 18;
function MyToken(uint _totalSupply) {
require (_totalSupply > 0);
totalSupply = _totalSupply;
balances[msg.sender] = totalSupply;
}
}
販売契約
contract Sale {
address owner;
address public founderAddress;
uint256 public constant foundersAmount = 50;
MyToken public token = new MyToken(1000);
uint256 public issuedTokensAmount = 0;
function Sale() {
owner = msg.sender;
founderAddress = 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c;
token.transfer(founderAddress, foundersAmount);
}
function() external payable {
token.transfer(msg.sender, 1);
owner.transfer(msg.value);
}
}
StandardTokenとOwnableはOpenZeppelinリポジトリからすべての標準実装があります。完全契約ソースはhereです。
基本的に私の販売契約では、私は固定供給でトークン契約のインスタンスを作成し、すべてのトークンを呼び出し元に割り当てます。その後、ある程度の量のトークンを創始者の住所に移します。販売契約にいくつかのethereumを送信しようとすると、私はいくつかのトークンを送付者に転送しようとしています(Remixブラウザですべてのコードを実行すると、販売契約のインスタンスを作成し、エーテル量を指定する "フォールバック"メソッドを呼び出します)。ただし、これは「実行中の例外(無効なオペコード)」で失敗します。詳細については、トランザクションをデバッグしてください。メッセージ。
token.transfer(msg.sender, 1);
私は、このメソッドにステップして起こっていただきました!見ることはできませんよと、私はこの正確な理由を見ることができない:私はデバッグがそのコードが行に支払われる方法で失敗したときに見ることができるすべての内部。
面白いのは、販売契約コンストラクタのトークンインスタンスで転送メソッドへの呼び出しを削除すると、コードが例外なく正常に実行されているようです。
私には何が欠けていますか?