是否有可能在已部署的稳健智能合同的buyTokens函数中以美元计算ETH的当前价格?
例如,每次启动GETH都会决定初始化期间ETH的价格。
或者,在一个站点上使用web3在确定美元值后与智能契约进行交互,这是否是通过预计算实现的真正方法?
提前谢谢你!
发布于 2020-05-19 17:01:16
您可以通过调用API的甲骨文 ( 因为区块链本身不能调用API )获取数据。
以下是如何通过分散的价格提要获取数据。您可以在链接价格饲料文件。中看到合同地址及其价格对的列表。
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中的集中式节点中提取,但理想情况下可以从节点网络中提取。
我是这篇博客文章的作者
发布于 2018-01-10 16:48:29
为此,您可以使用任何外部API。
为了在契约中调用外部API,您必须使用oraclize服务。
供您参考的示例代码:
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");
}}
https://ethereum.stackexchange.com/questions/35767
复制相似问题