为什么我不能将以太币发送到我的智能合约地址?
Why can't I send ether to my smart contract's address?
contract_file = 'contract.sol'
contract_name = ':SimpleContract'
Solc = require('solc')
Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
source_code = fs.readFileSync(contract_file).toString()
admin_account = web3.eth.accounts[0]
compiledContract = Solc.compile(source_code)
abi = compiledContract.contracts[contract_name].interface
bytecode = compiledContract.contracts[contract_name].bytecode;
ContractClass = web3.eth.contract(JSON.parse(abi))
contract_init_data = {
data: bytecode,
from: admin_account,
gas: 1000000,
}
deployed_contract = ContractClass.new(contract_init_data)
contract_instance = ContractClass.at(deployed_contract.address)
到这里为止,这是有效的。然而,令人惊讶的是,这条线
msg.sender.transfer(金额);
在我的合同中不会在 web3 上编译,尽管从 solidity 文档的 common pattern section 中直接得到了那一行。不得不改用 Solc,因为 transfer() 不在 0.4.6 中...
transfer() 不是以太坊的核心部分吗?我本来希望它存在于 v 0.1
无论如何,我然后尝试像这样将以太币添加到合约中:
load_up = {
from: admin_account,
to: deployed_contract.address,
value: web3.toWei(1, 'ether'),
}
web3.eth.sendTransaction(load_up)
我得到:
Error: VM Exception while processing transaction: invalid opcode
这并没有给我太多的工作空间。我做错了什么,以后如何调试此类问题?
原来我需要在合约上用payable
关键字创建一个方法,例如:
function AddEth () payable {}
然后我可以像这样与我的合约互动:
load_up = {
from: admin_account,
to: deployed_contract.address,
value: web3.toWei(10, 'ether'),
}
deployed_contract.AddEth.sendTransaction(load_up)
contract_file = 'contract.sol'
contract_name = ':SimpleContract'
Solc = require('solc')
Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
source_code = fs.readFileSync(contract_file).toString()
admin_account = web3.eth.accounts[0]
compiledContract = Solc.compile(source_code)
abi = compiledContract.contracts[contract_name].interface
bytecode = compiledContract.contracts[contract_name].bytecode;
ContractClass = web3.eth.contract(JSON.parse(abi))
contract_init_data = {
data: bytecode,
from: admin_account,
gas: 1000000,
}
deployed_contract = ContractClass.new(contract_init_data)
contract_instance = ContractClass.at(deployed_contract.address)
到这里为止,这是有效的。然而,令人惊讶的是,这条线 msg.sender.transfer(金额); 在我的合同中不会在 web3 上编译,尽管从 solidity 文档的 common pattern section 中直接得到了那一行。不得不改用 Solc,因为 transfer() 不在 0.4.6 中...
transfer() 不是以太坊的核心部分吗?我本来希望它存在于 v 0.1
无论如何,我然后尝试像这样将以太币添加到合约中:
load_up = {
from: admin_account,
to: deployed_contract.address,
value: web3.toWei(1, 'ether'),
}
web3.eth.sendTransaction(load_up)
我得到:
Error: VM Exception while processing transaction: invalid opcode
这并没有给我太多的工作空间。我做错了什么,以后如何调试此类问题?
原来我需要在合约上用payable
关键字创建一个方法,例如:
function AddEth () payable {}
然后我可以像这样与我的合约互动:
load_up = {
from: admin_account,
to: deployed_contract.address,
value: web3.toWei(10, 'ether'),
}
deployed_contract.AddEth.sendTransaction(load_up)