2017-05-18 68 views
2
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(amount);我的合同中的 無法在web3上編譯,儘管從solidity docs的common pattern section中直接得到了該行。不得不使用Solc,因爲transfer()不在0.4.6中...爲什麼我無法將乙醚發送到我的智能合約地址?

不是transfer()是ethereum的核心部分嗎?我本來預計到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 

這不給我很多工作。我做錯了什麼,以及我將來如何調試這樣的問題?

+1

你可以發佈你的合同代碼嗎?你正在使用哪個版本的solc?你使用什麼樣的節點(主,測試或本地testrpc?) – Gerben

+0

檢查此https://ethereum.stackexchange.com/questions/3613/getting-invalid-opcode-error – Gawey

回答

2

事實證明,我需要與payable關鍵字合同上創建一個方法,例如:

function AddEth() payable {}

,然後我可以用我的合同這樣的互動:

load_up = { 
    from: admin_account, 
    to: deployed_contract.address, 
    value: web3.toWei(10, 'ether'), 
} 
deployed_contract.AddEth.sendTransaction(load_up) 
相關問題