标签: blockchain

当我通过 Cgo 导入使用 C 包的 2 个不同包时,Go 编译返回架构 x86_64 错误的重复符号

这是我的代码:

package main

import (
    kusb "github.com/karalabe/usb"
    tusb "github.com/trezor/trezord-go/usb"
)

func main() {
    kusb.Enumerate(0, 0)
    tusb.InitHIDAPI(nil)
}
Run Code Online (Sandbox Code Playgroud)

当我编译时(我用来go mod管理包),它返回以下错误:

duplicate symbol _libusb_dev_mem_alloc in:
    /var/folders/fm/1rln65d94mn45s0h5l78tdyh0000gp/T/go-link-624554542/000002.o
    /var/folders/fm/1rln65d94mn45s0h5l78tdyh0000gp/T/go-link-624554542/000020.o
ld: 136 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

为什么?

我进行了一些调查:

  1. 这两个包都使用相同的hidapiClibusb包来与 USB 设备交互。
  2. 这些 C 包是相同的,因此它定义了相同的函数,所以我认为它与错误直接相关。
  3. 在 中trezord-go/usb,它们包含.C文件,而不是头文件。

这对我来说非常违反直觉,因为从包用户的角度来看,我不需要担心 C 包在包内部如何使用,只需要担心公开的类型、函数及其行为。

谁能真正解释一下这里发生了什么以及我如何导入它们?尽管它们使用相同的 C 包,但它们执行不同的功能。

c linker go cgo blockchain

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

约 5000 毫秒的 QLDB 高延迟

我正在使用“aws-sdk:^2.576.0”和“amazon-qldb-driver-nodejs:0.1.0-preview.2”,并遵循node-sdk 的 qldb 示例代码。我通过公开的 REST API 调用 node-sdk 函数。

因此,对于读表操作,即SELECT *查询(scanTable来自示例代码),以下是延迟细分:

在此处输入图片说明

我正在使用会话池为每笔交易获取一个新会话,pooledQldbDriver.getSession()并且拥有近 100mbps 的良好互联网连接。

预计会有这么多延迟吗?我做错了什么,如何进一步减少?

latency amazon-web-services node.js blockchain amazon-qldb

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

如何将一系列结构从 web3js 发送到 Solidity 合约?

我在从 web3js 传递(javascript 对象数组)到以(结构数组)作为参数的solidity 函数时遇到错误。

你可以帮帮我吗?

下面是代码和错误

// web3js code

let slctedItems = [{name:'item1', qty:2},{name:'item2', qty:3}];

contract.methods.calcItems(slctedItems).call((err, total) => {

      // code

    })
Run Code Online (Sandbox Code Playgroud)

//solidity code

 struct Item{

        string name;
        uint qty;

    }

function calcItems(Item[] memory _items) public view returns(uint){

        //code 
       // return uint
    }

Run Code Online (Sandbox Code Playgroud)

//solidity code

 struct Item{

        string name;
        uint qty;

    }

function calcItems(Item[] memory _items) public view returns(uint){

        //code 
       // return uint
    }

Run Code Online (Sandbox Code Playgroud)

问题的在线示例和我编写的代码。在下面的链接中:https :
//malaak-habashy.github.io/

我在 web3js github 上发现了一个问题。请参阅以下链接:https :
//github.com/ethereum/web3.js/issues/3538

blockchain ethereum solidity web3js web3-donotuse

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

Solidity, Solc Error: Struct containing a (nested) mapping cannot be constructed

I am using Solc version 0.7.0 installed by npm. When I try to create a Struct that contains mapping, I received an error: "Struct containing a (nested) mapping cannot be constructed."

Please check the code:

// SPDX-License-Identifier: MIT
pragma solidity 0.7.0;

contract Test {
    struct Request {
        uint256 value;
        mapping(address => bool) approvals;
    }
    Request[] public requests;
      ...

    function createRequest(
        uint256 value
    ) public {
        Request memory newRequest = Request({// here the compiler complains
            value: value
        });

        requests.push(newRequest);
    }
} …
Run Code Online (Sandbox Code Playgroud)

mapping struct blockchain ethereum solidity

6
推荐指数
3
解决办法
1842
查看次数

链下工作人员和签名交易

据称,fn offchain_worker在块导入后,所有节点每次都会调用该函数。想象一下这样的情况:fn offchain_worker我们进行 http 调用以从远程服务器获取一些不确定的值,一旦获得结果,我们就调用签署pub fn onchain_callback交易以将该结果包含在区块链状态中。

如果在每个块导入后所有验证器都执行链下工作人员,那么我最终会得到每个验证器的一个新签名交易,并具有不同的结果(记住不是确定性的)。

例子。我的链下工作人员从远程服务器获取随机数并回调签署新交易的结果。如果我的网络中有 10 个验证者...问题:

1.- 我最终会得到 10 笔具有不同随机数的新交易?

2.- 它将仅由验证者执行,还是由连接到区块链的所有完整节点执行?

3.- 是否可以仅在块中包含某个外部因素时而不是在每次块导入后触发链下工作人员?

blockchain substrate

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

Docker 环境中的 Ethers.js JsonRpcProvider Geth 节点

我正在尝试将 Ethers.js 连接到在 Docker 容器中运行的本地 Ehereum 节点 (Geth)。在客户端,我以这种方式创建提供程序:new ethers.providers.JsonRpcProvider('http://geth:8545')geth是节点容器主机名,并且两个容器位于同一网络上:我可以从客户端容器内 ping Geth 节点。当我开始从客户端请求节点时,出现错误"noNetwork"

当我在没有 Docker 的情况下运行客户端,通过 请求节点容器时http://localhost:8545,它工作正常。

怎么了?

  • Geth 节点的 Docker-compose 文件:
version: "3.5"

services:
  geth:
    container_name: geth
    image: ethereum/client-go:latest
    volumes:
      - /etc/geth:/root/.ethereum:rw
    ports:
      - "8545:8545"
      - "30303:30303"
    networks:
      - ethereum
    entrypoint: "geth --nousb --http --http.corsdomain '*' --http.addr 0.0.0.0 --http.api personal,eth,net,web3 --syncmode light"

networks:
  ethereum:
    name: ethereum-net
Run Code Online (Sandbox Code Playgroud)
  • 客户端的 Docker-compose 文件:
version: "3.5"

services:
  eth-server:
    container_name: eth_server_dev
    build: packages/eth-server/.
    environment:
      - NODE_ENV=development
      - NODE_PORT=3002 …
Run Code Online (Sandbox Code Playgroud)

docker blockchain docker-compose ethereum geth

6
推荐指数
0
解决办法
1911
查看次数

BSC 测试网:Truffle Migrate ETIMEDOUT

我需要将我的智能合约部署到 BSC 测试网

我总是得到这个:

Error: PollingBlockTracker - encountered an error while attempting to update latest block:
Error: ETIMEDOUT
Run Code Online (Sandbox Code Playgroud)

我尝试更改此处指定的 RPC https://docs.binance.org/smart-chain/developer/rpc.html#rate-limit

所有这些,却还是一样。

一件事是,我尝试将其部署到 ropsten 只是为了好玩。这就是成功。现在BSC Testnet RPC有什么问题吗?

这是我的 truffle-config.js 片段

        testnet: {
            provider: () => new HDWalletProvider(mnemonic, `https://data-seed-prebsc-1-s2.binance.org:8545`),
            network_id: 97, // 3 for ropsten, 97 for bsc test
            confirmations: 2,
            timeoutBlocks: 2000,
            skipDryRun: true,
            networkCheckTimeout: 1000000
        },
Run Code Online (Sandbox Code Playgroud)

我搜索了一下,有些人使用websocket(wss),有些人更改RPC Url,有些人添加networkCheckTimeout。我尝试了所有这些(除了 wss,因为我没有看到它是由 BSC Testnet 提供的)。但没有任何作用。

有什么建议吗?谢谢

blockchain smartcontracts binance-smart-chain

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

使用 web3 从网站断开钱包

我正在使用 web3 使用以下方法连接到元掩码

await window.ethereum.request({ method: 'eth_requestAccounts' });
var address = await window.ethereum.request({ method: 'eth_accounts' });
Run Code Online (Sandbox Code Playgroud)

但是当我刷新屏幕时它仍然显示为已连接,我无法在 web3 中找到任何方法将其与 pancackeswap 等网站断开连接

reactjs blockchain web3js metamask

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

如何突破 OpenSea Api 的限制?

我正在尝试使用 OpenSea API,我注意到我需要在检索资产之前设置限制 https://docs.opensea.io/reference/getting-assets

我想我可以使用偏移量来浏览所有项目,尽管这很乏味。但问题是offset本身是有限制的,超出最大offset的资产是不是就无法访问了呢?

我读到您说 API 在没有 API 密钥的情况下受到“速率限制”,所以我假设这与您在特定时间段内可以发出的请求数量有关,我的说法正确吗?还是解除了返还资产的限制?该文档不清楚https://docs.opensea.io/reference/api-overview

我可以做什么来浏览所有资产?

api rest blockchain nft opensea

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

Solidity“函数需要指定重写的合约”问题

我是 Solidity 的新手,我有一个关于多重继承的问题。

因此,如果我有一些合同,例如:

contract A {

    function foo() public virtual {
        console.log("A");
    }
}

contract B is A {
    function foo() public virtual override {
        console.log("B");
    }
}

contract C is A, B {
    function foo() public override(A, B) {
        super.foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

合约C的功能foo必须是override(A, B)insdeadoverride(B)

或者它会抛出一个错误,比如Function needs to specify overridden contract "A".

那么问题来了,该函数必须指定完整的继承父级。

为什么它不能知道信息contract C is A, B

我的意思是,有什么意义?该overrider(A,B)部分是不必要的。

还是有什么我不知道的技巧?

请给我一个答案,我很好奇,无法通过文档找到一些有用的信息。

inheritance blockchain ethereum solidity smartcontracts

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