在json里查看Solidity的版本

    智能合约使用truffle compile、npx hardhat compile、brownie compile这3种工具编译后,都会得到一个json文件,该json文件有合约的abi、bytecode、compiler等字段。

  • abi 应用程序二进制接口,是合约提供外界调用的接口。
  • bytecoe 字节码,合约代码编译之后得到的字节码,最后会部署到链上。
  • compiler 是Solidtiy的编译信息,包含链分叉的版本、solc版本、是否优化。

    //TokenERC20.json

  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.5.17"
  },

    从TokenERC20.json文件,可以得出该合约使用的Solidity编译器版本为v0.5.17, 链分叉版本:istanbul,已经开启优化。
    则在提交合约的编译信息时,填写的内容如下:

图(1) TokenERC20合约的编译信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solidity中编写预言机Oracle需要遵循以下步骤: 1. 定义Oracle合约:创建一个名为Oracle的新合约,并定义一个可信任的数据源(例如API)来提供数据。 2. 接收数据请求:在Oracle合约中创建一个接收数据请求的函数,该函数应包含数据请求的细节(例如请求的数据类型和数据源的地址)。 3. 获取数据:使用定义的数据源获取数据,并将数据存储在Oracle合约中。 4. 返回数据:在Oracle合约中创建一个返回数据的函数,该函数应返回请求的数据。 以下是一个简单的Solidity合约示例,用于从API获取当前比特币价格: ``` pragma solidity ^0.8.0; contract Oracle { address public owner; string public bitcoinPrice; constructor() { owner = msg.sender; } function getBitcoinPrice() public { //定义API地址 string memory apiUrl = "https://api.coindesk.com/v1/bpi/currentprice.json"; //获取API数据 bytes memory apiResponse = httpGet(apiUrl); //解析数据 bitcoinPrice = parseApiResponse(apiResponse); } function httpGet(string memory url) private view returns (bytes memory) { //使用Solidity内置函数访问URL (bool success, bytes memory response) = address(this).staticcall( abi.encodeWithSignature("httpGet(string)", url) ); //如果成功,则返回API响应 if (success) { return response; } else { revert("API request failed"); } } function parseApiResponse(bytes memory response) private pure returns (string memory) { //解析JSON并返回比特币价格 //(这假设已经有一个解析JSON的函数) return parseJson(response)["bpi"]["USD"]["rate"]; } } ``` 请注意,这只是一个简单的示例,实际上需要更多的代码来确保Oracle合约与数据源之间的安全通信,并保护合约中的数据不被篡改。此外,还需要考虑如何将Oracle合约与其他智能合约集成,以便它们可以访问Oracle合约中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值