首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在稳健函数中获得ETH的当前*价格?

有没有办法在稳健函数中获得ETH的当前*价格?
EN

Ethereum用户
提问于 2018-01-10 16:30:48
回答 2查看 6.7K关注 0票数 5

是否有可能在已部署的稳健智能合同的buyTokens函数中以美元计算ETH的当前价格?

例如,每次启动GETH都会决定初始化期间ETH的价格。

或者,在一个站点上使用web3在确定美元值后与智能契约进行交互,这是否是通过预计算实现的真正方法?

提前谢谢你!

EN

回答 2

Ethereum用户

发布于 2020-05-19 17:01:16

您可以通过调用API的甲骨文 ( 因为区块链本身不能调用API )获取数据。

以下是如何通过分散的价格提要获取数据。您可以在链接价格饲料文件。中看到合同地址及其价格对的列表。

代码语言:javascript
复制
pragma solidity ^0.6.0;

import "github.com/smartcontractkit/chainlink/evm-contracts/src/v0.6/interfaces/AggregatorInterface.sol";

contract ReferenceConsumer {
  AggregatorInterface internal ref;
  // For ETH-USD on ropsten, input the address:
  // 0x8468b2bDCE073A157E560AA4D9CcF6dB1DB98507

  constructor(address _aggregator) public {
    ref = AggregatorInterface(_aggregator);
  }

  function getLatestAnswer() public view returns (int256) {
    return ref.latestAnswer();
  }
}

更详细的解释和使用Chainlink价格提要的示例可以找到在链接博客上。

如前所述,您可以使用像链环奥拉克利兹这样的甲骨文调用外部API。从一个源中使用它意味着它对于您的智能契约也有一个失败源,所以理想情况下,您可以从分散节点服务中提取。有关更多信息,请参见链环

分散价格饲料

另一个不调用外部API的更简单的方法是使用链接参考合同。您所需要做的就是获取聚合器合同的地址。对于on的ETH-美元,该地址是0x8468b2bDCE073A157E560AA4D9CcF6dB1DB98507。您可以找到支持的主网地址列表( 这里这里的测试网/主网地址 )。

这些参考契约由一组分散的节点更新,以获得最近的价格,而不具有集中式节点所具有的单一故障点。

如果您想要创建您自己的一组集中式节点以获得价格,您也可以使用。

您也可以从Chainlink中的集中式节点中提取,但理想情况下可以从节点网络中提取。

有关外部数据收集的更多信息,请参见此博客文章。

我是这篇博客文章的作者

票数 4
EN

Ethereum用户

发布于 2018-01-10 16:48:29

为此,您可以使用任何外部API。

为了在契约中调用外部API,您必须使用oraclize服务。

供您参考的示例代码:

代码语言:javascript
复制
    pragma solidity ^0.4.16;
    import "./usingOraclize.sol";  //Importing Oraclize
    contract TestOraclizeCall is usingOraclize {
            uint public price;
           event Log(string text);
           //Constructor
           function TestOraclizeCall() {
                 OAR = OraclizeAddrResolverI(0x5049063e4a7704ac155e4f1f42a4954bbef5bbde);
            }
      function __callback(bytes32 _myid, string _result) {
                 require (msg.sender == oraclize_cbAddress());
                 Log(_result);
                  price = parseInt(_result, 2);
        }
        function update() payable {
                oraclize_query("URL","json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD");
        }

}

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/35767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档