在 Web 应用程序的后端,我必须与公共以太坊区块链进行通信。
在本地开发机器上,我将 ganache 作为 testrpc 运行并连接到这样一行代码:
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
Run Code Online (Sandbox Code Playgroud)
我还发现我可以针对 RinkeBy 测试网进行开发
web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/$thisistheapikey"));
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能与真正的公共区块链通信呢?我是否需要geth在 Web 服务器上运行并连接到它的实例?或者有没有可以使用的公共网络?(如果我们可以信任的话)
我正在使用以太坊学习区块链,我想使用Solidity在智能合约中使用过去的交易数据.如果我在用javascript编写的程序中使用Web3.js模块,我可以轻松获得这些数据.但我无法使用Solidity在Smart合同中获取这些数据.
Solidity的参考说我们可以通过使用"block.number"和"block.blockhash(uint blockNumber)"函数来获取当前的块编号,blockhash等,但是没有提到获取事务数据.(http://solidity.readthedocs.io/en/latest/units-and-global-variables.html#special-variables-and-functions)
请帮我.
我在让 python 函数web3.geth.txpool.inspect() 工作时遇到问题。
我已经尝试从命令行、ethereum/client-go容器和容器中使用 geth 服务器trufflesuite/ganache-cli:v6.7.0。
在每种情况下,我都会收到 txpool_inspect 方法丢失错误。我正在运行的代码非常简单,使用 Python 3.7.5 或 3.8:
from web3 import Web3
thing = Web3("http://localhost:42424")
thing.geth.txpool.inspect()
Run Code Online (Sandbox Code Playgroud)
我正在使用 web3py==5.2.2 。
对于我尝试过的 Geth:--dev --mine --rpc --rpcaddr 0.0.0.0 --rpcport 42424 --verbosity 4 我也尝试了各种其他启动选项,似乎没有什么能让我克服 txpool_inspect 不存在或丢失的主题识别错误。
在真正的区块链上尝试之前,我想先让它在测试/开发环境中工作。
建议?
我在web3提供程序(localhost:8545)上运行时出错
Not possible to connect to the Web3 provider. Make sure the provider is running and a connection is open (via IPC or RPC).
Run Code Online (Sandbox Code Playgroud)
所以我想像下面。
我在本地运行geth,并提供了一些与remix和testnet连接的选项。
$ geth —testnet —rpc —rpcapi “db, net, web3, personal” —rpccorsdomain “https://remix.ethereum.org” console
Run Code Online (Sandbox Code Playgroud)
我给了-rpccorsdomain,因为混音在https上。
无论如何,请在remix IDE中的“运行”选项卡上检查“ web3证明程序”。
然后,修改地址,例如“ http://127.0.0.1:8545 ”,而不是“ http:// localhost:8545 ”。
我不知道为什么会这样,但是当我这样修复后,它仍然可以工作。我记了帐,做了些什么。
但是,由于某种原因,我不得不再次重新下载geth。(我已经换了个人电脑)。而且我现在正在同步块。我认为同步尚未完成,因为blockNumber为0。
> eth.blockNumber
0
Run Code Online (Sandbox Code Playgroud)
所以...我现在正在等待,但我想知道当eth.syncing未完全完成时是否会发生错误。
如何使用 geth 或 nodejs 或任何其他语言从正在运行的以太坊节点获取块信息?例如,要从比特币获取块数据,有一个配置文件,在确认交易时运行 blocknotify.sh 文件,并且在该 blocknotify.sh 文件中存在以下命令:bitcoin-cli getblock "$@" >> "$@.json"获取块数据,然后我可以发送帖子向 api 请求该块数据。所以我想做同样的事情,即从 ETH 节点获取块数据,并在交易确认时向 api 发送 post 请求。我怎样才能做到这一点 ?
我设置了一个简单的 Geth (v1.10.2-stable-97d11b01) 专用网络(genesis.json配置如下)。我编译并部署了这个简单的测试合约(solidity版本:0.8.4+commit.c7e474f2.Emscripten.clang):
// SPDX-License-Identifier: UNLICENSED;
pragma solidity >=0.8;
contract CoinA {
bytes32 public coinName = "FAKE";
mapping (address => uint) public balances;
function transfer(address receiver, uint amount) public {
require(balances[msg.sender] >= amount, "Not enough amount");
balances[msg.sender] -= amount;
balances[receiver] += amount;
}
function set(uint amount) public {
require(amount >= 0);
balances[msg.sender] = amount;
}
function get() view public returns (uint) {
return balances[msg.sender];
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在调用该set方法时,我收到此错误:
UnhandledPromiseRejectionWarning:错误:返回错误:无效操作码:SELFBALANCE
请建议如何解决这个问题。是因为服务器没有支持该操作码的最新功能吗?无论如何,我可以在不使用该操作码的情况下编译代码吗?
如果相关的话,我在 Node 上使用 Web3JS 调用它:
async …Run Code Online (Sandbox Code Playgroud) 我想用 Docker 创建私有以太坊网络。我已经准备好了创世文件,所以我需要geth init genesis.json然后开始像geth --mine .... 我可以用脚本来做(比如这里:https : //github.com/vertigobr/ethereum/blob/master/runminer.sh#L5和https://github.com/vertigobr/ethereum/blob/master/runnode。 sh#L23):
if [ ! -d $DATA_ROOT/keystore ]; then
echo "$DATA_ROOT/keystore not found, running 'geth init'..."
docker run --rm \
-v $DATA_ROOT:/root/.ethereum \
-v $(pwd)/genesis.json:/opt/genesis.json \
$IMGNAME init /opt/genesis.json
echo "...done!"
fi
echo "Running new container $CONTAINER_NAME..."
docker run $DETACH_FLAG --name $CONTAINER_NAME \
--network ethereum \
-v $DATA_ROOT:/root/.ethereum \
-v $DATA_HASH:/root/.ethash \
-v $(pwd)/genesis.json:/opt/genesis.json \
$RPC_PORTMAP \
$IMGNAME --bootnodes=$BOOTNODE_URL $RPC_ARG --cache=512 --verbosity=4 --maxpeers=3 …Run Code Online (Sandbox Code Playgroud) 我想在我的本地网络上部署智能合约。我通过执行本地节点
PRIVATE_CONFIG=ignore nohup geth --datadir ./Node1/new-
node-1
--nodiscover --verbosity 5 --networkid 31337 --raft --
raftport 51001 --rpc --rpcaddr 0.0.0.0 --rpcport 22101 --
rpcapi
admin,db,eth,debug,miner,net,shh,txpool,personal,web3,
quorum,raft --emitcheckpoints --port 21101 2>>node1.log &
Run Code Online (Sandbox Code Playgroud)
我必须使用 localhost:\127.0.0.1:21101 或 22101?我想知道这两个端口之间的区别以及用途?
如果您不介意的话,还有一个问题:当我使用端口 21101 时,它无法连接,当我查阅节点日志时,我发现:
Failed RLPx handshake addr=[::1]:42552 conn=inbound
err="read tcp [::1]:21102->[::1]:42552: i/o timeout"
Run Code Online (Sandbox Code Playgroud) 有geth程序在运行,并提供--rpc服务。
服务做什么:
mysql)。目前我们正在使用full模式,但它有点慢,并且需要更多的磁盘空间。
fast模式是否足以满足上述用途?fullmdoe切换到fastmode,会geth不会要重新下载所有年的历史?或者,它会重用历史?(我在Ethereum现场问了另一个关于以太坊的问题,有兴趣的也可以看看:https : //ethereum.stackexchange.com/questions/78293/how-to-migrate-geths-data )
我试图在一个大的int数上进行计算,然后将结果转换为字节数组,但是我不知道该怎么做,这是我到目前为止所处的位置。任何人有任何想法
sum := big.NewInt(0)
for _, num := range balances {
sum = sum.Add(sum, num)
}
fmt.Println("total: ", sum)
phrase := []byte(sum)
phraseLen := len(phrase)
padNumber := 65 - phraseLen
Run Code Online (Sandbox Code Playgroud)