标签: geth

如何在网络服务器上与公共以太坊区块链通信?

在 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 服务器上运行并连接到它的实例?或者有没有可以使用的公共网络?(如果我们可以信任的话)

ethereum geth

5
推荐指数
1
解决办法
2116
查看次数

我们是否可以使用智能合约中的Solidity获取过去区块中记录的交易信息?

我正在使用以太坊学习区块链,我想使用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)

在此输入图像描述

请帮我.

blockchain ethereum solidity web3js geth

4
推荐指数
1
解决办法
1213
查看次数

txpool_inspect 方法不存在/不可用

我在让 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 不存在或丢失的主题识别错误。

在真正的区块链上尝试之前,我想先让它在测试/开发环境中工作。

建议?

ethereum web3-donotuse go-ethereum geth ganache

4
推荐指数
1
解决办法
1189
查看次数

REMIX | 无法连接到Web3提供程序

我在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未完全完成时是否会发生错误。

provider ethereum go-ethereum geth remix

3
推荐指数
2
解决办法
4047
查看次数

如何使用geth获取以太坊区块的数据

如何使用 geth 或 nodejs 或任何其他语言从正在运行的以太坊节点获取块信息?例如,要从比特币获取块数据,有一个配置文件,在确认交易时运行 blocknotify.sh 文件,并且在该 blocknotify.sh 文件中存在以下命令:bitcoin-cli getblock "$@" >> "$@.json"获取块数据,然后我可以发送帖子向 api 请求该块数据。所以我想做同样的事情,即从 ETH 节点获取块数据,并在交易确认时向 api 发送 post 请求。我怎样才能做到这一点 ?

ethereum go-ethereum geth

2
推荐指数
1
解决办法
1万
查看次数

执行简单合约时,Geth 私网返回错误“invalid opcode: SELFBALANCE”

我设置了一个简单的 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)

blockchain ethereum solidity smartcontracts geth

2
推荐指数
1
解决办法
2388
查看次数

如何`geth init`并使用Docker-compose开始geth挖掘?

我想用 Docker 创建私有以太坊网络。我已经准备好了创世文件,所以我需要geth init genesis.json然后开始像geth --mine .... 我可以用脚本来做(比如这里:https : //github.com/vertigobr/ethereum/blob/master/runminer.sh#L5https://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)

docker docker-compose ethereum geth

1
推荐指数
1
解决办法
1161
查看次数

当我想将 remix 连接到本地仲裁网络时,我使用哪个端口?

我想在我的本地网络上部署智能合约。我通过执行本地节点

       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)

blockchain ethereum quorum geth

1
推荐指数
1
解决办法
986
查看次数

以太坊,使用哪种同步模式,快速还是完整?

geth程序在运行,并提供--rpc服务。

服务做什么:

  • 同步块。
  • 接受 rpc 请求以创建事务。
  • 还有另一个程序尝试读取新块,并找出与我们钱包中的地址相关的交易,并将数据同步到本地数据库(例如mysql)。

目前我们正在使用full模式,但它有点慢,并且需要更多的磁盘空间。


问题

  • fast模式是否足以满足上述用途?
  • 哪个更好?
  • 如果我们从fullmdoe切换到fastmode,会geth不会要重新下载所有年的历史?或者,它会重用历史?

(我在Ethereum现场问了另一个关于以太坊的问题,有兴趣的也可以看看:https : //ethereum.stackexchange.com/questions/78293/how-to-migrate-geths-data )

blockchain ethereum go-ethereum geth

1
推荐指数
1
解决办法
5623
查看次数

我如何将* big.Int转换为golang中的字节数组

我试图在一个大的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)

arrays go go-ethereum geth

0
推荐指数
1
解决办法
2000
查看次数