我在虚拟机(Ubuntu16.04)上运行了一个testrpc,当我使用松露控制台与它交互时,它正常工作。
我唯一的目标是调用一个智能合同,它只需将乙醚从一个帐户发送到另一个帐户。这是一份明智的合同:
pragma solidity ^0.4.4;
contract Transfer {
address owner;
function Transfer () {
owner = msg.sender;
}
function sendEther (address dst) payable {
if(msg.value<=0) revert();
dst.transfer(msg.value);
}
}我正在尝试使用javascript从web访问函数sendEther。当我在本地访问我的测试网时,一切正常,但现在我无法连接到它。
脚本通过浏览器化进行转换,然后作为一个简单的脚本标记包含在htm文件中。
剧本是这样的:
var Web3 = require('web3');
let web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
function getParameterByName(name, url) {
/* irrelevant code here */
}
try
{
// I have to define "source" this way because web3.eth.accounts[0] is undefined, most likely because there's no connection :(
var source = "0x8691202f56859bd5362f1033fa64e71cb4eae579";
var abi = [{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"sendEther","outputs":[],"payable":true,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}];
var contract_addr = getParameterByName("contract");
var amount = getParameterByName("amount");
var destination = getParameterByName("destination");
var contract = new web3.eth.Contract(abi, contract_addr, {from: source, to: destination, value: parseInt(amount)});
var hash = contract.methods.sendEther(destinatario);
document.write("<br/> Source: ");
document.write(source);
document.write("<br/> Destination: ");
document.write(destination);
document.write("<br/><br/><b>ABI:</b> ");
document.write(JSON.stringify(abi));
document.write("<br/><br/><b>Contract:</b> ");
document.write(JSON.stringify(contract));
document.write("<br/><br/><b>Contract address:</b> ");
document.write(contract_addr);
document.write("<br/><br/><b>Amount (weis):</b> ");
document.write(amount);
document.write("<br/><br/><b>Transaction hash:</b> ");
document.write(JSON.stringify(hash));
document.write("<br/><br/><b>Transaction details:</b> ");
document.write(JSON.stringify(web3.eth.getTransaction(hash)));
} catch (e) {
document.write("<br/></br><b>Error: ");
document.write(e.message);
document.write("</b>");
}这是我得到的输出:
Source: 0x8691202f56859bd5362f1033fa64e71cb4eae579
Destination: 0x09b74dc58118140deec480d562651e42ae3b21ad
ABI: [{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"sendEther","outputs":[],"payable":true,"type":"function","signature":"0x48c981e2"},{"inputs":[],"payable":false,"type":"constructor"}]
Contract: {"currentProvider":{"host":"http://localhost:8545","timeout":0,"connected":false},"_requestManager":{"provider":{"host":"http://localhost:8545","timeout":0,"connected":false},"providers":{},"subscriptions":{}},"givenProvider":null,"providers":{},"_provider":{"host":"http://localhost:8545","timeout":0,"connected":false},"_ethereumCall":{},"options":{"from":"0x8691202F56859BD5362f1033FA64E71cb4EaE579","to":"0x09b74dc58118140deec480d562651e42ae3b21ad","value":1000000000000,"address":"0x377D5848c8A7B68D20CcE114f23AD959a62CC9f7","jsonInterface":[{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"sendEther","outputs":[],"payable":true,"type":"function","signature":"0x48c981e2"},{"inputs":[],"payable":false,"type":"constructor"}]},"defaultAccount":null,"defaultBlock":"latest","methods":{},"events":{},"_address":"0x377D5848c8A7B68D20CcE114f23AD959a62CC9f7","_jsonInterface":[{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"sendEther","outputs":[],"payable":true,"type":"function","signature":"0x48c981e2"},{"inputs":[],"payable":false,"type":"constructor"}]}
Contract address: 0x377d5848c8a7b68d20cce114f23ad959a62cc9f7
Amount (weis): 1000000000000
Transaction hash: {"arguments":["0x09b74dc58118140deec480d562651e42ae3b21ad"],"_method":{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"sendEther","outputs":[],"payable":true,"type":"function","signature":"0x48c981e2"},"_parent":{"currentProvider":{"host":"http://localhost:8545","timeout":0,"connected":false},"_requestManager":{"provider":{"host":"http://localhost:8545","timeout":0,"connected":false},"providers":{},"subscriptions":{}},"givenProvider":null,"providers":{},"_provider":{"host":"http://localhost:8545","timeout":0,"connected":false},"_ethereumCall":{},"options":{"from":"0x8691202F56859BD5362f1033FA64E71cb4EaE579","to":"0x09b74dc58118140deec480d562651e42ae3b21ad","value":1000000000000,"address":"0x377D5848c8A7B68D20CcE114f23AD959a62CC9f7","jsonInterface":[{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"sendEther","outputs":[],"payable":true,"type":"function","signature":"0x48c981e2"},{"inputs":[],"payable":false,"type":"constructor"}]},"defaultAccount":null,"defaultBlock":"latest","methods":{},"events":{},"_address":"0x377D5848c8A7B68D20CcE114f23AD959a62CC9f7","_jsonInterface":[{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"sendEther","outputs":[],"payable":true,"type":"function","signature":"0x48c981e2"},{"inputs":[],"payable":false,"type":"constructor"}]}}
Transaction details: {"isFulfilled":false,"isRejected":false} 这就是问题所在..。当我与松露控制台交互时,一切都很好。当我尝试通过网络做同样的事情时,它不会连接。
对这里发生了什么有什么想法吗?
先谢谢你!)
发布于 2017-08-30 11:10:39
好吧,我找到答案了。我会把它留在这里给任何发现有用的人..。
我没有意识到truffle serve,当我尝试使用它时,它引发了一个错误。
该错误可以通过以下指示来解决:https://github.com/trufflesuite/truffle/issues/448
我终于可以从浏览器中看到我的testrpc!:)
https://ethereum.stackexchange.com/questions/25399
复制相似问题