以太坊浏览器查询,如何将以太坊节点连接到Web浏览器。节点是以太坊网络的实例。每个节点托管有史以来所有以太坊交易,并与网络中的所有其他节点不断同步。以太坊节点:以太坊-Geth,以太坊-cpp,奇偶校验,MetaMask(节点和浏览器之间的桥梁)。
以太坊区块链节点实现以太坊协议,您可以通过以下节点执行以下操作:
连接到其他节点;
访问区块链;
在区块链上挖掘;
与以太坊区块链的交互可以通过交易或通话来完成。这些之间的区别是:
交易(写):
发布到网络;
由矿工处理;
是否有效写入区块链(更新区块链状态);
消耗乙醚(气体);
异步;
验证交易后,返回值为交易哈希;
致电(只读):
从区块链读取数据;
不消耗醚(气体);
仅本地
同步;
返回值立即返回;
因为每次我们要更新区块链的状态都会花费以太币(gas),并且一旦部署智能合约就无法更改,因此我们应该首先在私有区块链或公共Testnet区块链上实施合同。另外,您需要知道在这些网络上以太是毫无价值的。
2.需要安装。
2.1首先,安装其他安装所需的节点软件包管理器。
https://nodejs.org/en/
2.2在浏览器中安装MetaMask,这样就不必下载整个节点。
https://metamask.io/
2.3安装git。
https://git-scm.com/downloads
2.4安装在您的项目Web3.js上,如果是新项目,则将其克隆。
https://github.com/ethereum/web3.js/
2.5安装http服务器。
-npminstall-ghttp-server
3.将您的区块链连接到浏览器。
首先,我们需要一个以太坊节点(Mainet或Testnet)。我们至少有3种不同的方法可以做到这一点:
使用Mist钱包(Testnet或Mainet),它将在后台运行一个节点。之后,您将需要同步区块链,并且还需要一些以太币来部署代码(这可能需要数小时到数天);
创建一个私有区块链并在本地运行该节点。在这里,我们必须注意我们自己的合同(我们必须验证交易),而且,重要的是要提到您不需要节点浏览器。
使用Metamask网桥连接到Mainet或Testnet节点。因此,通过这种方式,我们将不必担心同步节点,验证我们的交易或挖掘以太坊(您也可以在Testnet上请求一些以太坊)。
元掩码设置:
创建一个帐户;
选择一个TestnetRinkeby或Ropsten;
通过购买按钮请求一些以太币(这是免费的);
从http服务器开始:
从克隆的Web3.js中启动控制台,并使用以下命令运行http服务器:http-server;
确保您已登录MetaMask,并在打开新浏览器时要注意!因为您将自动从帐户断开连接。
现在,让我们将节点与Web3.js连接起来。在Web3.js克隆项目中,我们创建一个index.html并使用此JavaScript。
如果(typeofweb3!==’未定义’){
//雾,Metamask
web3=新的Web3(web3.currentProvider);
}其他{
//从Web3.providers设置所需的提供程序
web3=新的Web3(新的Web3.providers.HttpProvider(“http://localhost:8545”));
}
让我们测试一下!您将从第一个帐户获得余额。
web3.eth.getBalance(web3.eth.accounts[0],函数(错误,结果){
如果(错误){
console.error(错误)
}其他{
document.getElementById(“myBalance”)。innerText=web3.fromWei(result.toNumber());
}
});
正如我所说的,从区块链读取是同步的,当节点不在本地时会出现异常。在MetaMask上,即使阅读也必须添加一个回调。
如果您在本地运行节点(薄雾或私有区块链)就足够了。
document.getElementById(“myBalance”)。innerText=
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]))
4.Web3.js简介。
让我们部署一个基本的智能合约:
首先,我们需要编译我们的坚固性代码,以便可以在JavaScript中运行它。之后,从编译后的代码中,我们将使用ABI(应用程序二进制接口)和字节码。
最好的编译器是https://remix.ethereum.org,因为它为您的合同提供了出色的调试器。另外,可以在JavaScript项目中导入一个Solidity编译器,但由于没有调试器,因此不如第一个(我向您推荐的)编译器好。
编译代码后,我们继续详细介绍并获得ABI和字节码。
ABI是传递给web3.eth.contract的参数,字节码是数据。您可以将整个代码从web3deploy复制到您的JavaScript文件中并进行部署(也可以通过运行和创建的混用来进行部署)。但是,您必须注意,因为您只能部署一次合同,并且合同中的代码无法更改。因此,如果您需要更新代码,则最好销毁合同并创建新合同。
为了与合同进行交互,我们需要合同实例,我们可以在部署合同后立即将其保存在变量中(合同实例是来自回调“contract”的响应)。
保存合同实例的第二种方法是从以前部署的具有ABI和合同地址的合同中获取。
contract_instance=web3.eth.contract(contract_abi).at(contract_adress);
当由于消息或交易触发合同而执行合同时,每条指令都会在网络的每个节点上执行。这是有成本的。对于每个执行的操作,都有指定的成本,以天然气单位数量表示。
因此,您需要解锁帐户才能进行交易。另一方面,如果是关于MetaMask的,则会出现一个弹出窗口,并要求提交包含天然气价格和天然气价格(您愿意在每单位天然气上花费的乙醚数量)的交易。天然气的价值由市场和开采交易时优先考虑较高天然气价格的节点驱动。
web3.personal.unlockAccount(web3.eth.accounts[0],“密码”)
让我们进行交易并更新合同状态。
contract_instance.setMyNumber(setVal,
{来自:web3.eth.accounts[0]},函数(错误,响应){
如果(错误){
console.error(错误)
}其他{
console.log(“https://rinkeby.etherscan.io/tx/”+response)
}
})
如果是公共功能,则任何地址都可以调用它。因此,在进行呼叫时,您需要添加一个代表呼叫者的额外参数。您也可以添加气体量,但这不是必需的,因为它是可选参数。
让我们看一下事件:
myEvent=contract_instance.NumberHasChanged({},
{fromBlock:“latest”,toBlock:“latest”});
myEvent.watch(function(error,result){
如果(错误){
console.log(错误)
}其他{
console.log(“数字已更改”,结果)
}
})
事件监视的第一个参数是过滤器。这是可选的,第二个对象是不言自明的。
这是与Web3.js一起部署的智能合约的基本示例。另外,您需要知道,Web3.js不仅可以与以太坊一起使用,而且可以与至少其他40个区块链一起使用,并且可以与许多javascript库和框架(Angular,React,Vuejs)结合使用。