我需要获取代币从特定时间到最近一轮的 Chainlink 价格。该时间根据用户输入而变化,但根据令牌的心跳,窗口期相对较短(最多 1 天到 2 周)。这用于计算智能合约和应用程序主页上的支付价格。
为了获取历史价格数据,Chainlink 需要一个“roundId”,它是一个非增量值。
从 Chainlink 获取给定时间窗口的所有 roundId 或以开放、去中心化且可在 Solidity 智能合约中访问的方式记录它们的最佳方法是什么?
我尝试了您在此处的讨论中(在其他问题中)和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) 我有一个问题:我应该选择哪个提供商来与主网上的合约进行交互,为什么?
看起来 Web3Provider 更容易使用,有什么缺点吗?
谢谢您的回答。
我试图从 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) 我正在尝试调试和测试我开发的智能合约,但是在测试网上这样做需要花费大量时间,而且我想在本地节点上正确测试。
我可以创建节点并部署合约,从元掩码中的帐户转移到另一个帐户,一切正常,除了当我在浏览器中访问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)
我尝试过勇敢和镀铬,我尝试创建一个不同的安全帽项目,同样的错误。
我能做些什么?谢谢!
我有一个仅接受字节数据的函数调用(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)
我可以将数据解码为单个结构,然后有选择地将其转换为两个所需的结构,但这似乎气体效率低下
我正在做审计智能合约,有人更喜欢使用这样的初始化函数:
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)
你能解释一下为什么没有使用构造函数吗?
人们可以使用UniSwap Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)和交换代币UniSwap Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f)
但有什么不同呢?为什么存在两个交换代币的合约?
我看到上面有很多旧的tx UniSwap Factory,看起来UniSwap Factory活跃度并不高UniSwap Router,是否意味着UniSwap Router有新技术要取代UniSwap Factory?
在下面的代码中:
console.log("Deploying contract....");
const simpleStorage = await simpleStorageFactory.deploy();
await simpleStorage.deployed();
Run Code Online (Sandbox Code Playgroud)
第 2 行部署了合约,我们得到了它。
为什么我们需要在 Line3 中调用已部署的方法?