标签: ethereum

以去中心化方式从 Chainlink 获取代币历史价格数据的最佳方式是什么?

我需要获取代币从特定时间到最近一轮的 Chainlink 价格。该时间根据用户输入而变化,但根据令牌的心跳,窗口期相对较短(最多 1 天到 2 周)。这用于计算智能合约和应用程序主页上的支付价格。

为了获取历史价格数据,Chainlink 需要一个“roundId”,它是一个非增量值。

从 Chainlink 获取给定时间窗口的所有 roundId 或以开放、去中心化且可在 Solidity 智能合约中访问的方式记录它们的最佳方法是什么?

blockchain ethereum solidity thegraph chainlink

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

ParserError:源文件需要不同的编译器版本

我尝试了您在此处的讨论中(在其他问题中)和https://github.com/smartcontractkit/full-blockchain-solidity-course-py/discussions/522中提到的所有内容,但是它并没有为我解决问题,我还注意到当前的编译器版本仍然存在(当前编译器是0.6.12+commit.27d51765.Windows.msvc)。但是当我右键单击并选择Solidty:编译器信息时,它显示0.8.0。

从输出:

Retrieving compiler information:
Compiler using remote version: 'v0.8.0+commit.c7dfd78e', solidity version: 0.8.0+commit.c7dfd78e.Emscripten.clang
Run Code Online (Sandbox Code Playgroud)

不确定这是否与我面临的问题有关。无论如何,从运行布朗尼编译时看到的问题开始。我收到以下错误:

终端错误:

PS D:\Python projects\Solidity dev\demo\smartcontract-lottery> brownie compile
INFO: Could not find files for the given pattern(s).
Brownie v1.17.2 - Python development framework for Ethereum

Compiling contracts...
  Solc version: 0.6.12
  Optimizer: Enabled  Runs: 200
  EVM Version: Istanbul
CompilerError: solc returned the following errors:

C:/Users/rosne/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.3.0/contracts/access/Ownable.sol:3:1: ParserError: Source file requires different compiler version (current compiler is 0.6.12+commit.27d51765.Windows.msvc) - note that nightly builds are considered to be strictly …
Run Code Online (Sandbox Code Playgroud)

python ethereum solidity smartcontracts brownie

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

我应该选择哪个提供商?Web3 提供商?Infura 提供商?JsonRPCProvider?

我有一个问题:我应该选择哪个提供商来与主网上的合约进行交互,为什么?

看起来 Web3Provider 更容易使用,有什么缺点吗?

谢谢您的回答。

blockchain ethereum web3js ethers.js

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

Etherjs:类型错误:contract.XXX 不是函数

我试图从 FTM 网络上的智能合约调用名为“remove_liquidity_one_coin”的函数,但出现以下错误并且无法找出原因:

TypeError: curveContract.remove_liquidity_one_coin is not a function

通常,当我想要调用合约的函数时,我会获取 ABI(合约地址),然后实例化它并可以使用它的函数。

对于下面的合约,它适用于“读取”功能,但不适用于“写入”功能,例如remove_liquidity_one_coin.

这是我使用的简化代码:

let signer = new ethers.Wallet(privateKey, provider)
let contractAddress = "0xa58f16498c288c357e28ee899873ff2b55d7c437"
let contractAbi = [...] // ABI of the contract. In this case: https://api.ftmscan.com/api?module=contract&action=getabi&address=0x3cabd83bca606768939b843f91df8f4963dbc079&format=raw
let curveContract = new ethers.Contract(contractAddress, contractAbi, signer)

// Read function => works
let liquidityToRemove = await curveContract.calc_withdraw_one_coin(
            lpTokenToWidraw, // Amount to withdraw
            0 // Index of the token to withdraw
);

// Write function => doesn't work
let receivedCoins = await curveContract.remove_liquidity_one_coin( …
Run Code Online (Sandbox Code Playgroud)

blockchain ethereum web3js ethers.js

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

Hardhat 节点,本地主机上的浏览器中出现错误

我正在尝试调试和测试我开发的智能合约,但是在测试网上这样做需要花费大量时间,而且我想在本地节点上正确测试。

我可以创建节点并部署合约,从元掩码中的帐户转移到另一个帐户,一切正常,除了当我在浏览器中访问http://127.0.0.1:8545/时 ,我收到此错误:

{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"Parse error: Unexpected end of JSON input"}}
Run Code Online (Sandbox Code Playgroud)

我尝试过勇敢和镀铬,我尝试创建一个不同的安全帽项目,同样的错误。

我能做些什么?谢谢!

blockchain ethereum solidity hardhat

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

Solidity:将字节数据解码为两个结构

我有一个仅接受字节数据的函数调用(dydx _getCallActions)

_getCallAction(bytes memory data)
Run Code Online (Sandbox Code Playgroud)

在合约执行期间,数据被传递到名为“callFunction”的用户定义函数

当解码为单个结构时,它可以工作,但是我想将数据解码为两个单独的结构。

function callFunction(bytes calldata _data){
// This works, when passed in encoded data matching Struct1Type
Struct1Type memory data1 = abi.decode(_data, (Struct1Type));
}


function callFunction(bytes calldata _data){
// Doesnt work
Struct1Type memory data1, Struct2Type memory data2 = abi.decode(_data, (Struct1Type,Struct2Type));
}
Run Code Online (Sandbox Code Playgroud)

我可以将数据解码为单个结构,然后有选择地将其转换为两个所需的结构,但这似乎气体效率低下

decode ethereum solidity

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

Chainlink VRF v2 请求 Gas 费金额

我试图准确了解为以太坊主网上的 chainlink VRF V2 随机值请求提供燃气费需要花费多少(以 LINK 为单位)。

这里有一个关于它的公式,但我不确定我是否正确。

任何帮助,将不胜感激。

blockchain ethereum solidity chainlink

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

Solidity:为什么使用初始化函数而不是构造函数?

我正在做审计智能合约,有人更喜欢使用这样的初始化函数:

 bool private isInit=false;
 string private hello;
 
 function init(string _hello) public onlyOwner {
   hello = _hello;
   isInit = true;
 } 

 function doSomething() public {
   require(isInit, "Wait for initialize");
   ...doSomething
 }
Run Code Online (Sandbox Code Playgroud)

你能解释一下为什么没有使用构造函数吗?

architecture state ethereum solidity smartcontracts

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

UniSwap Router 和 UniSwap Factory 有什么不同?

人们可以使用UniSwap Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)和交换代币UniSwap Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f)

但有什么不同呢?为什么存在两个交换代币的合约?

我看到上面有很多旧的tx UniSwap Factory,看起来UniSwap Factory活跃度并不高UniSwap Router,是否意味着UniSwap Router有新技术要取代UniSwap Factory

ethereum uniswap

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

安全帽以太:部署与部署

在下面的代码中:

console.log("Deploying contract....");
const simpleStorage = await simpleStorageFactory.deploy();
await simpleStorage.deployed();
Run Code Online (Sandbox Code Playgroud)

第 2 行部署了合约,我们得到了它。

为什么我们需要在 Line3 中调用已部署的方法?

ethereum ether hardhat

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