Procházet zdrojové kódy

near: add Tilt changes for local testing

Reisen před 2 roky
rodič
revize
1c49b582ff

+ 14 - 0
Tiltfile

@@ -268,6 +268,20 @@ k8s_resource(
     trigger_mode = trigger_mode,
 )
 
+# NEAR devnet
+docker_build(
+    ref = "near-node",
+    context = "./target_chains/near/devnet",
+    dockerfile = "./target_chains/near/devnet/Dockerfile",
+)
+
+docker_build(
+    ref = "near-deploy",
+    context = ".",
+    dockerfile = "tilt_devnet/docker_images/Dockerfile.near",
+)
+
+k8s_yaml_with_ns("tilt_devnet/k8s/near-devnet.yaml")
 
 # terra devnet
 

+ 14 - 0
target_chains/near/Dockerfile.build

@@ -0,0 +1,14 @@
+# A Docker file to build a Rust wasm32-unknown-unknown binary.
+FROM    rust:1.67 AS builder
+RUN     rustup target add wasm32-unknown-unknown
+ADD     receiver/Cargo.lock   /code/receiver/
+ADD     receiver/Cargo.toml   /code/receiver/
+ADD     receiver/src          /code/receiver/src
+ADD     attest-sdk/Cargo.toml /code/attest-sdk/Cargo.toml
+ADD     attest-sdk/src        /code/attest-sdk/src
+WORKDIR /code/receiver
+RUN     cargo build --release --target wasm32-unknown-unknown
+
+# Produce a minimal Docker image with only the WASM.
+FROM    scratch AS export-stage
+COPY    --from=builder /code/receiver/target/wasm32-unknown-unknown/release/pyth.wasm /

+ 0 - 0
target_chains/near/build.sh


+ 1 - 0
target_chains/near/devnet/Dockerfile

@@ -0,0 +1 @@
+FROM ghcr.io/wormhole-foundation/near:0.2@sha256:c2089c5e93df2396d74f9c07e7cd3d76983fad97bddb202030ca442c2c00c3c2 AS near-node

+ 3 - 0
target_chains/near/devnet/devnet_deploy.sh

@@ -0,0 +1,3 @@
+#!/bin/bash -f
+
+npx ts-node devnet_deploy.ts

+ 91 - 0
target_chains/near/devnet/devnet_deploy.ts

@@ -0,0 +1,91 @@
+// npx pretty-quick
+
+const nearAPI = require("near-api-js");
+const BN = require("bn.js");
+const fs = require("fs");
+const fetch = require("node-fetch");
+import { NodeHttpTransport } from "@improbable-eng/grpc-web-node-http-transport";
+const { parseSeedPhrase, generateSeedPhrase } = require("near-seed-phrase");
+
+function getConfig(env: any) {
+  switch (env) {
+    case "sandbox":
+    case "local":
+      return {
+        networkId: "sandbox",
+        nodeUrl: "http://localhost:3030",
+        masterAccount: "test.near",
+        pythAccount: "pyth.test.near",
+        tokenAccount: "token.test.near",
+        nftAccount: "nft.test.near",
+        testAccount: "test.test.near",
+      };
+    case "testnet":
+      return {
+        networkId: "testnet",
+        nodeUrl: "https://rpc.testnet.near.org",
+        masterAccount: "pyth.testnet",
+        pythAccount: "pyth.pyth.testnet",
+        tokenAccount: "token.pyth.testnet",
+        nftAccount: "nft.pyth.testnet",
+        testAccount: "test.pyth.testnet",
+      };
+  }
+  return {};
+}
+
+async function initNear() {
+  let e = process.env.NEAR_ENV || "sandbox";
+  let config = getConfig(e);
+
+  // Retrieve the validator key directly in the Tilt environment
+  const response = await fetch("http://localhost:3031/validator_key.json");
+  const keyFile = await response.json();
+  const masterKey = nearAPI.utils.KeyPair.fromString(
+    keyFile.secret_key || keyFile.private_key
+  );
+
+  let keyStore = new nearAPI.keyStores.InMemoryKeyStore();
+  keyStore.setKey(config.networkId, config.masterAccount, masterKey);
+
+  let near = await nearAPI.connect({
+    keyStore,
+    networkId: config.networkId,
+    nodeUrl: config.nodeUrl,
+  });
+
+  let masterAccount = new nearAPI.Account(
+    near.connection,
+    config.masterAccount
+  );
+
+  console.log(
+    "Finish init NEAR masterAccount: " +
+      JSON.stringify(await masterAccount.getAccountBalance())
+  );
+
+  const deposit = parseSeedPhrase(
+    "weather opinion slam purpose access artefact word orbit matter rice poem badge"
+  );
+  const response = await masterAccount.createAccount(
+    "devnet.test.near",
+    response.publicKey,
+    new BN(10).pow(new BN(27))
+  );
+
+  console.log("Key: devnet.test.near funded");
+
+  const pythContract = await fs.readFileSync("./pyth.wasm");
+  keyStore.setKey(config.networkId, config.pythAccount, masterKey);
+
+  console.log("Deploying Core/Pyth contract: " + config.pythAccount);
+
+  pythAccount = await masterAccount.createAndDeployContract(
+    config.pythAccount,
+    masterKey.getPublicKey(),
+    pythContract,
+    new BN("20000000000000000000000000")
+  );
+}
+
+initNear();

+ 20 - 0
tilt_devnet/docker_images/Dockerfile.near

@@ -0,0 +1,20 @@
+# A Docker file to build a Rust wasm32-unknown-unknown binary.
+FROM    rust:1.67 AS builder
+RUN     rustup target add wasm32-unknown-unknown
+ADD     target_chains/near/receiver/Cargo.lock   /code/target_chains/near/receiver/
+ADD     target_chains/near/receiver/Cargo.toml   /code/target_chains/near/receiver/
+ADD     target_chains/near/receiver/src          /code/target_chains/near/receiver/src
+ADD     wormhole_attester/sdk/rust               /code/wormhole_attester/sdk/rust
+WORKDIR /code/target_chains/near/receiver
+RUN     ls -l
+RUN     cargo build --release --target wasm32-unknown-unknown
+
+# Produce a minimal Docker image with only the WASM.
+FROM    scratch AS export-stage
+COPY    --from=builder /code/target_chains/near/receiver/target/wasm32-unknown-unknown/release/pyth.wasm /
+
+# Deploy.
+FROM    node:16-buster-slim@sha256:93c9fc3550f5f7d159f282027228e90e3a7f8bf38544758024f005e82607f546
+COPY    --from=export-stage /pyth.wasm /pyth.wasm
+COPY    target_chains/near/devnet/devnet_deploy.sh /devnet_deploy.sh
+COPY    target_chains/near/devnet/devnet_deploy.ts /devnet_deploy.ts

+ 66 - 0
tilt_devnet/k8s/near-devnet.yaml

@@ -0,0 +1,66 @@
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app: near
+  name: near
+spec:
+  ports:
+    - name: node
+      port: 3030
+      targetPort: node
+  selector:
+    app: near
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  labels:
+    app: near
+  name: near
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: near
+  serviceName: near
+  template:
+    metadata:
+      labels:
+        app: near
+    spec:
+      containers:
+        - name: near-node
+          image: near-node
+          env:
+            # this still results in DEBUG logs from "stats", but `warn,stats=warn` didn't work
+            - name: RUST_LOG
+              value: warn
+          command:
+            - /bin/sh
+            - -c
+            # because the above still left logs, redirecting stderr
+            - "/tmp/start_node.sh 2> /dev/null"
+          ports:
+            - containerPort: 3030
+              name: node
+              protocol: TCP
+            - containerPort: 3031
+              name: webserver
+              protocol: TCP
+          readinessProbe:
+            tcpSocket:
+              port: 3030
+        - name: near-deploy
+          image: near-deploy
+          command:
+            - /bin/sh
+            - -c
+            - "sh /devnet_deploy.sh && touch success && sleep infinity"
+          readinessProbe:
+            tcpSocket:
+              port: 3030
+            periodSeconds: 1
+            initialDelaySeconds: 15
+
+      restartPolicy: Always