From b74e52b062960de5228bf76f75af2abf09875653 Mon Sep 17 00:00:00 2001
From: pascuin
Date: Fri, 20 Oct 2023 17:06:51 +0200
Subject: [PATCH] feat(): adds acurast under oracles (#478)
---
docs/integrations/oracles/acurast.md | 156 +++++++++++++++++++++++++++
1 file changed, 156 insertions(+)
create mode 100644 docs/integrations/oracles/acurast.md
diff --git a/docs/integrations/oracles/acurast.md b/docs/integrations/oracles/acurast.md
new file mode 100644
index 00000000000..1414b21fe5e
--- /dev/null
+++ b/docs/integrations/oracles/acurast.md
@@ -0,0 +1,156 @@
+---
+sidebar_position: 1
+---
+
+# Acurast
+
+[Acurast]: https://acurast.com/
+
+## Overview
+
+[Acurast](https://acurast.com/) is a platform and protocol designed to enable Web3 projects and enterprises to realize the full potential of Web3 by interconnecting worlds like Web2, Web3, AI, IOT through Acurast's Universal Interoperability.
+
+## Using Acurast
+
+Through Acurast developers can arbitrarly fetch data from public or permissioned APIs for the "Oracle" use case such as price feeds for DeFi platforms through a decentralized execution layer of off-chain workers. These [Processors](https://docs.acurast.com/acurast-processors), hosted by individuals, provide the resources of their Trusted Execution Environment that can be utilized to run computation yielding a verifiable output directly on chain. Developers can use the [Acurast Console](https://console.acurast.com/) to create new request and to get access to these interoperability resources.
+
+Acurast supports Astar's **WASM** and **EVM** environments. Contract Examples address can be found below:
+
+### Astar Destination Example
+
+WASM Smart Contract: b2o6ENagNWAxQT9f9yHFxfVMSpJA7kK6ouMhNN6veKXi3jw
+
+### Shiden Destination
+
+WASM Smart Contract: 0xDA7a001b254CD22e46d3eAB04d937489c93174C3
+
+## Obtain Data with Acurast on WASM and EVM
+
+### How to Get Started
+
+1. Deploy one of the example contracts to WASM or EVM
+1. Define your script detailing where to fetch data, computation etc.
+1. Create a Job on the [Acurast Console](https://console.acurast.com/)
+1. Processors will fulfill verifiable outputs in your defined interval to your contract
+
+### WASM Example
+
+The following example shows simple WASM smart contracts implemented with [ink!](https://use.ink/).
+
+Keep in mind that you can do much more with Acurast and get access to all interoperability modules besides these examples.
+
+```rust
+#![cfg_attr(not(feature = "std"), no_std)]
+
+use ink;
+
+#[ink::contract]
+mod receiver {
+ #[ink(storage)]
+ pub struct Receiver {
+ price: u128,
+ }
+
+ impl Receiver {
+ #[ink(constructor)]
+ pub fn default() -> Self {
+ Self {
+ price: Default::default(),
+ }
+ }
+
+ #[ink(message)]
+ pub fn fulfill(&mut self, price: u128) {
+ self.price = price;
+ }
+
+ #[ink(message)]
+ pub fn get_price(&self) -> u128 {
+ self.price
+ }
+ }
+}
+
+```
+
+### EVM Example
+
+```ts
+pragma solidity 0.8.10;
+
+/**
+ * @title Simple price feed contract
+ */
+contract PriceFeed {
+ // Account authorized to update the prices
+ address public provider = 0xF7498512502f90aA1ff299b93927417461EC7Bd5;
+
+ // Callable by other contracts
+ uint128 public price;
+
+ /**
+ * Provide the latest price
+ */
+ function fulfill(uint128 new_price) external {
+ require(msg.sender == provider, "NOT_PROVIDER");
+ price = new_price;
+ }
+}
+```
+
+### Script
+
+This example script shows how a "Price Feeds" is fetched from Binance and pushed to a WASM smart contract. You can view and test the your script on the Acurast Console.
+
+```js
+const callIndex = "0x4606"; // the call index for the 'call' extrinsic.
+const destination = "b2o6ENagNWAxQT9f9yHFxfVMSpJA7kK6ouMhNN6veKXi3jw"; // contract address that will receive the 'fulfill' call.
+_STD_.chains.substrate.signer.setSigner("SECP256K1"); // the type of signer used for sign the extrinsic call
+httpGET(
+ "https://api.binance.com/api/v3/ticker/price?symbol=AAVEBUSD",
+ {},
+ (response, _certificate) => {
+ const price = JSON.parse(response)["price"] * 10 ** 18;
+ const payload = _STD_.chains.substrate.codec.encodeUnsignedNumber(
+ price,
+ 128
+ );
+ _STD_.chains.substrate.contract.fulfill(
+ "https://rpc.astar.network",
+ callIndex,
+ destination,
+ payload,
+ {
+ refTime: "3951114240",
+ proofSize: "125952",
+ },
+ (opHash) => {
+ print("Succeeded: " + opHash);
+ },
+ (err) => {
+ print("Failed fulfill: " + err);
+ }
+ );
+ },
+ (err) => {
+ print("Failed get price: " + err);
+ }
+);
+```
+
+### Job Specification
+
+1. Go to the [Acurast Console](https://console.acurast.com/) and log in with your [Talisman Wallet](https://www.talisman.xyz/wallet) or your [PolkadotJS Extension](https://polkadot.js.org/extension/).
+1. Go to "Create Job" and select your destination, the ecosystem you're building in.
+1. Select an existing template, adapt it or write your own code that fits your needs. Test your code with "Test Code".
+1. Select your own Processor or use public ones.
+1. Define your execution schedule with the parameters such as start and endtime, interval etc.
+1. Specify your usage parameters.
+1. Specify your additional parameters such as the reward.
+1. Publish your Job and wait for your first fulfillment.
+
+Or check out [How to get started with the Acurast Console](/developers/introduction#get-started) to register your Job.
+
+## Full Documentation
+
+You can find Acurast's official documentation [here](https://docs.acurast.com/).