Урок 1

以太坊预言机(Ethereum Oracles)介绍

欢迎来到这门课程。当你开始这次探索以太坊预言机领域的旅程时,你将会学习到区块链网络如何与外界进行交流。预言机就像是一座桥梁,它连接了智能合约的确定性和现实世界的不断变化。本课程的目标是解读预言机背后的复杂性,让它们变得更易于理解和接近。

预言机(Oracles)的意义何在?

以太坊的去中心化网络和其智能合约与现实世界是完全隔绝的。这种隔绝确保了一致性、安全性和完整性。然而,这也带来了一个局限性:这些智能合约不能自行访问或验证外部数据。那么,如果一个合约的执行依赖于当前的黄金价格、特定城市的天气状况,或者选举结果呢?

预言机填补了这个鸿沟。作为信使,它们收集、验证并将现实世界的信息传递给智能合约,从而扩大了去中心化应用的可能性范围。

试想以下的情况:

Solidity
// A mock smart contract requiring external data
contract GoldPriceBet {
    Oracle oracleInstance;  // An oracle instance providing real-time gold prices
    address bettor;
    uint256 wagerAmount;

    function placeGoldPriceBet(uint predictedPrice) external payable {
        bettor = msg.sender;
        wagerAmount = msg.value;

        // Here, we would typically invoke the oracle to fetch the current gold price
    }
}

代码注释:

  • Oracle oracleInstance; 这是一个占位符,用于我们的 GoldPriceBet 合约与之交互以获取当前黄金价格的预言机(Oracle)合约。
  • placeGoldPriceBet 函数允许用户下注预测黄金价格。理想情况下,在下注后,预言机将被调用以获取实时的黄金价格并确定结果。

多样化的预言机生态

大致上来说,预言机分为两大类:

中心化预言机

由单一实体或组织运营,中心化预言机效率高,能快速获取数据。然而,它们的致命弱点是信任。智能合约的执行依赖于这个中心化实体的诚信。被操纵或错误的数据可能导致意外的结果。

去中心化预言机

为了减轻中心化系统的缺点,去中心化预言机应运而生。在这里,多个预言机组成的网络提供数据。智能合约可能采用聚合方法,如平均值或中位数,以得出一个值。通过分散数据来源,这些预言机减小了与人为操纵或单点故障相关的风险。

Solidity
// An illustrative smart contract leveraging a decentralized oracle framework
contract CommodityPriceFeed {
    DecentralizedOracle[] oracleArray;  // An array of decentralized oracles

    function deriveAveragePrice() external view returns (uint256) {
        uint256 cumulativeValue = 0;
        for (uint i = 0; i < oracleArray.length; i++) {
            cumulativeValue += oracleArray[i].fetchPrice();
        }
        return cumulativeValue / oracleArray.length;
    }
}

代码注释:

  • DecentralizedOracle[] oracleArray;这是一个数组,用于存储多个去中心化预言机的实例。
  • deriveAveragePrice 函数计算从oracleArray中所有预言机获取的平均价格。它遍历每一个预言机,获取价格,然后除以预言机的数量以得到平均值。

现实世界中的预言机应用

预言机的潜在应用非常广泛和多元:

  • 金融衍生品:像期权这样的金融工具需要访问现实世界资产价格来执行合约。
  • 智能保险:想象一下,一个旅行保险智能合约能够自动地在航班延误时补偿用户,这些数据来自于一个航空预言机。
  • 供应链验证:通过将外部数据输入到区块链中,可以实现产品从制造到客户交付的实时跟踪。
  • 去中心化游戏:基于区块链的在线游戏可以利用预言机根据现实世界事件(如体育比赛结果)来影响游戏结果。
    阅读更多关于预言机的文章: What Is an Oracle in Blockchain?

金融衍生品与交易平台

金融平台需要实时的资产价格、利率或其他经济指标信息。去中心化衍生品平台使用预言机来确保合约,如期货和期权,基于准确、防篡改的市场数据进行结算。

Solidity
solidityCopy code
// An example smart contract for a decentralized option
contract DecentralizedOption {
    Oracle priceOracle;
    uint256 strikePrice = 1000;  // Example value

    function exerciseOption() external {
        uint256 currentPrice = priceOracle.fetchCurrentPrice();
        if (currentPrice > strikePrice) {
            // Logic to exercise the option
        }
    }
}

代码注释:

  • DecentralizedOption 合约与预言机交互以获取当前价格。
  • 当用户行使期权时,合约会根据预定义的执行价格检查当前价格以确定结果。

智能保险

预言机促进了去中心化保险平台的发展,提供诸如农作物保险所需的天气模式、旅行保险所需的航班状态,或地震保险所需的地震活动等数据。

Solidity
contract FlightDelayInsurance {
    Oracle flightStatusOracle;

    function claimInsurance(string flightNumber) external {
        string status = flightStatusOracle.getFlightStatus(flightNumber);
        if (strcmp(status, "Delayed") == 0) {
            // Logic to compensate the insured
        }
    }
}

代码注释:

  • FlightDelayInsurance 合约使用预言机获取航班状态。
  • 根据航班的状态,如果航班延误,它会对被保险人进行赔偿。

供应链验证

对于去中心化的供应链解决方案,预言机可以在每个阶段提供可验证的数据,从原材料采购到产品交付,以确保产品的真实性和道德采购。

Solidity
contract SupplyChainTracker {
    Oracle locationOracle;
    address productOwner;

    function verifyProductLocation(address productID) external view returns (string memory) {
        return locationOracle.fetchProductLocation(productID);
    }
}

代码注释:

  • 此合约使用预言机在供应链的任何阶段获取产品的位置。
  • 它可以用于跟踪产品并验证其来源和路线。

去中心化游戏

集成现实世界事件(如体育赛事结果或股市走势)的游戏可以通过使用预言机获取必要的数据以去中心化的方式构建。

Solidity
contract SportsBet {
    Oracle sportsResultOracle;

    function placeBet(string teamName) external payable {
        // Logic for placing a bet
    }

    function resolveBet() external {
        string winningTeam = sportsResultOracle.getMatchResult();
        // Logic to reward winners based on the outcome
    }
}

代码注释:

  • SportsBet 允许用户对体育赛事结果进行下注。
  • 然后它与预言机交互以获取比赛结果,并相应地解决下注。
    现在我们已经初步探索了以太坊预言机的世界。在后续的课程中,我们将深入探讨预言机与智能合约集成的复杂性。如果内容让你感觉很兴奋,请继续保持你的学习热情。因为去中心化数据的世界正在向我们招手!
Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 1

以太坊预言机(Ethereum Oracles)介绍

欢迎来到这门课程。当你开始这次探索以太坊预言机领域的旅程时,你将会学习到区块链网络如何与外界进行交流。预言机就像是一座桥梁,它连接了智能合约的确定性和现实世界的不断变化。本课程的目标是解读预言机背后的复杂性,让它们变得更易于理解和接近。

预言机(Oracles)的意义何在?

以太坊的去中心化网络和其智能合约与现实世界是完全隔绝的。这种隔绝确保了一致性、安全性和完整性。然而,这也带来了一个局限性:这些智能合约不能自行访问或验证外部数据。那么,如果一个合约的执行依赖于当前的黄金价格、特定城市的天气状况,或者选举结果呢?

预言机填补了这个鸿沟。作为信使,它们收集、验证并将现实世界的信息传递给智能合约,从而扩大了去中心化应用的可能性范围。

试想以下的情况:

Solidity
// A mock smart contract requiring external data
contract GoldPriceBet {
    Oracle oracleInstance;  // An oracle instance providing real-time gold prices
    address bettor;
    uint256 wagerAmount;

    function placeGoldPriceBet(uint predictedPrice) external payable {
        bettor = msg.sender;
        wagerAmount = msg.value;

        // Here, we would typically invoke the oracle to fetch the current gold price
    }
}

代码注释:

  • Oracle oracleInstance; 这是一个占位符,用于我们的 GoldPriceBet 合约与之交互以获取当前黄金价格的预言机(Oracle)合约。
  • placeGoldPriceBet 函数允许用户下注预测黄金价格。理想情况下,在下注后,预言机将被调用以获取实时的黄金价格并确定结果。

多样化的预言机生态

大致上来说,预言机分为两大类:

中心化预言机

由单一实体或组织运营,中心化预言机效率高,能快速获取数据。然而,它们的致命弱点是信任。智能合约的执行依赖于这个中心化实体的诚信。被操纵或错误的数据可能导致意外的结果。

去中心化预言机

为了减轻中心化系统的缺点,去中心化预言机应运而生。在这里,多个预言机组成的网络提供数据。智能合约可能采用聚合方法,如平均值或中位数,以得出一个值。通过分散数据来源,这些预言机减小了与人为操纵或单点故障相关的风险。

Solidity
// An illustrative smart contract leveraging a decentralized oracle framework
contract CommodityPriceFeed {
    DecentralizedOracle[] oracleArray;  // An array of decentralized oracles

    function deriveAveragePrice() external view returns (uint256) {
        uint256 cumulativeValue = 0;
        for (uint i = 0; i < oracleArray.length; i++) {
            cumulativeValue += oracleArray[i].fetchPrice();
        }
        return cumulativeValue / oracleArray.length;
    }
}

代码注释:

  • DecentralizedOracle[] oracleArray;这是一个数组,用于存储多个去中心化预言机的实例。
  • deriveAveragePrice 函数计算从oracleArray中所有预言机获取的平均价格。它遍历每一个预言机,获取价格,然后除以预言机的数量以得到平均值。

现实世界中的预言机应用

预言机的潜在应用非常广泛和多元:

  • 金融衍生品:像期权这样的金融工具需要访问现实世界资产价格来执行合约。
  • 智能保险:想象一下,一个旅行保险智能合约能够自动地在航班延误时补偿用户,这些数据来自于一个航空预言机。
  • 供应链验证:通过将外部数据输入到区块链中,可以实现产品从制造到客户交付的实时跟踪。
  • 去中心化游戏:基于区块链的在线游戏可以利用预言机根据现实世界事件(如体育比赛结果)来影响游戏结果。
    阅读更多关于预言机的文章: What Is an Oracle in Blockchain?

金融衍生品与交易平台

金融平台需要实时的资产价格、利率或其他经济指标信息。去中心化衍生品平台使用预言机来确保合约,如期货和期权,基于准确、防篡改的市场数据进行结算。

Solidity
solidityCopy code
// An example smart contract for a decentralized option
contract DecentralizedOption {
    Oracle priceOracle;
    uint256 strikePrice = 1000;  // Example value

    function exerciseOption() external {
        uint256 currentPrice = priceOracle.fetchCurrentPrice();
        if (currentPrice > strikePrice) {
            // Logic to exercise the option
        }
    }
}

代码注释:

  • DecentralizedOption 合约与预言机交互以获取当前价格。
  • 当用户行使期权时,合约会根据预定义的执行价格检查当前价格以确定结果。

智能保险

预言机促进了去中心化保险平台的发展,提供诸如农作物保险所需的天气模式、旅行保险所需的航班状态,或地震保险所需的地震活动等数据。

Solidity
contract FlightDelayInsurance {
    Oracle flightStatusOracle;

    function claimInsurance(string flightNumber) external {
        string status = flightStatusOracle.getFlightStatus(flightNumber);
        if (strcmp(status, "Delayed") == 0) {
            // Logic to compensate the insured
        }
    }
}

代码注释:

  • FlightDelayInsurance 合约使用预言机获取航班状态。
  • 根据航班的状态,如果航班延误,它会对被保险人进行赔偿。

供应链验证

对于去中心化的供应链解决方案,预言机可以在每个阶段提供可验证的数据,从原材料采购到产品交付,以确保产品的真实性和道德采购。

Solidity
contract SupplyChainTracker {
    Oracle locationOracle;
    address productOwner;

    function verifyProductLocation(address productID) external view returns (string memory) {
        return locationOracle.fetchProductLocation(productID);
    }
}

代码注释:

  • 此合约使用预言机在供应链的任何阶段获取产品的位置。
  • 它可以用于跟踪产品并验证其来源和路线。

去中心化游戏

集成现实世界事件(如体育赛事结果或股市走势)的游戏可以通过使用预言机获取必要的数据以去中心化的方式构建。

Solidity
contract SportsBet {
    Oracle sportsResultOracle;

    function placeBet(string teamName) external payable {
        // Logic for placing a bet
    }

    function resolveBet() external {
        string winningTeam = sportsResultOracle.getMatchResult();
        // Logic to reward winners based on the outcome
    }
}

代码注释:

  • SportsBet 允许用户对体育赛事结果进行下注。
  • 然后它与预言机交互以获取比赛结果,并相应地解决下注。
    现在我们已经初步探索了以太坊预言机的世界。在后续的课程中,我们将深入探讨预言机与智能合约集成的复杂性。如果内容让你感觉很兴奋,请继续保持你的学习热情。因为去中心化数据的世界正在向我们招手!
Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.