mirror of
https://github.com/alexgo-io/redstone-node.git
synced 2026-01-13 08:40:40 +08:00
call to SWC using SDK (#6)
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -21,3 +21,4 @@ dist
|
||||
|
||||
Dockerfile.redstone-dev
|
||||
yarn-error.log
|
||||
.clinic/
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"arql-ops": "^1.0.0",
|
||||
"arweave": "^1.10.14",
|
||||
"arweave-multihost": "^0.0.7",
|
||||
"arweave": "^1.10.15",
|
||||
"arweave-multihost": "^0.0.8",
|
||||
"axios": "^0.21.1",
|
||||
"coinbase": "^2.0.8",
|
||||
"coingecko-api": "^1.0.10",
|
||||
@@ -41,8 +41,7 @@
|
||||
"moment": "^2.29.1",
|
||||
"promise-timeout": "^1.3.0",
|
||||
"redstone-api": "^0.4.2",
|
||||
"redstone-smartweave-contracts": "redstone-finance/redstone-smartweave-contracts",
|
||||
"smartweave": "^0.4.31",
|
||||
"smartweave": "^0.4.34",
|
||||
"sort-deep-object-arrays": "^1.1.2",
|
||||
"uuid": "^8.3.2",
|
||||
"yahoo-finance": "^0.3.7",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"arweaveKeysFile": "./.secrets/arweave-keyfile-33F0QHcb22W7LwWR1iRC8Az1ntZG09XQ03YWuw2ABqA.json",
|
||||
"useManifestFromSmartContract": "true",
|
||||
"minimumArBalance": 0.1,
|
||||
"minimumArBalance": 0.01,
|
||||
"addEvmSignature": true,
|
||||
"credentials": {
|
||||
"infuraProjectId": "XXX",
|
||||
|
||||
@@ -4,13 +4,13 @@ import Transaction from "arweave/node/lib/transaction";
|
||||
import aggregators from "./aggregators";
|
||||
import broadcaster from "./broadcasters/lambda-broadcaster";
|
||||
import ArweaveProxy from "./arweave/ArweaveProxy";
|
||||
import {trackEnd, trackStart, printTrackingState} from "./utils/performance-tracker";
|
||||
import {printTrackingState, trackEnd, trackStart} from "./utils/performance-tracker";
|
||||
import {Manifest, NodeConfig, PriceDataAfterAggregation, PriceDataSigned, SignedPricePackage} from "./types";
|
||||
import mode from "../mode";
|
||||
import ManifestHelper, {TokensBySource} from "./manifest/ManifestParser";
|
||||
import ArweaveService from "./arweave/ArweaveService";
|
||||
import PricesService, {PricesBeforeAggregation, PricesDataFetched} from "./fetchers/PricesService";
|
||||
import {mergeObjects, readJSON, sleep} from "./utils/objects";
|
||||
import {mergeObjects, readJSON, timeout} from "./utils/objects";
|
||||
import PriceSignerService from "./signers/PriceSignerService";
|
||||
|
||||
const logger = require("./utils/logger")("runner") as Consola;
|
||||
@@ -27,7 +27,7 @@ export default class NodeRunner {
|
||||
private currentManifest?: Manifest;
|
||||
private pricesService?: PricesService;
|
||||
private tokensBySource?: TokensBySource;
|
||||
private newManifest?: Manifest;
|
||||
private newManifest: Manifest | null = null;
|
||||
private priceSignerService?: PriceSignerService;
|
||||
|
||||
private constructor(
|
||||
@@ -115,7 +115,7 @@ export default class NodeRunner {
|
||||
private async runIteration() {
|
||||
logger.info("Running new iteration.");
|
||||
|
||||
if (this.newManifest !== undefined) {
|
||||
if (this.newManifest !== null) {
|
||||
logger.info("Using new manifest: ", this.newManifest.txId);
|
||||
this.useNewManifest(this.newManifest)
|
||||
}
|
||||
@@ -274,7 +274,10 @@ export default class NodeRunner {
|
||||
|
||||
const now = Date.now();
|
||||
const timeDiff = now - this.lastManifestLoadTimestamp!;
|
||||
logger.info("Checking time since last manifest load", {timeDiff, "manifestRefreshInterval": MANIFEST_REFRESH_INTERVAL})
|
||||
logger.info("Checking time since last manifest load", {
|
||||
timeDiff,
|
||||
"manifestRefreshInterval": MANIFEST_REFRESH_INTERVAL
|
||||
})
|
||||
|
||||
if (timeDiff >= MANIFEST_REFRESH_INTERVAL) {
|
||||
this.lastManifestLoadTimestamp = now;
|
||||
@@ -283,14 +286,18 @@ export default class NodeRunner {
|
||||
try {
|
||||
// note: not using "await" here, as loading manifest's data takes about 6 seconds and we do not want to
|
||||
// block standard node processing for so long (especially for nodes with low "interval" value)
|
||||
this.arweaveService.getCurrentManifest()
|
||||
.then(this.handleLoadedManifest)
|
||||
.catch((reason) => {
|
||||
logger.error("Error while loading manifest", reason);
|
||||
})
|
||||
.finally(() => {
|
||||
trackEnd(manifestFetchTrackingId);
|
||||
});
|
||||
Promise.race([
|
||||
this.arweaveService.getCurrentManifest(),
|
||||
timeout(10000)
|
||||
]).then((value) => {
|
||||
if (value === "timeout") {
|
||||
logger.warn("Manifest load promise timeout");
|
||||
} else {
|
||||
this.handleLoadedManifest(value);
|
||||
}
|
||||
trackEnd(manifestFetchTrackingId);
|
||||
});
|
||||
|
||||
} catch (e) {
|
||||
logger.info("Error while calling manifest load function.")
|
||||
}
|
||||
@@ -299,7 +306,7 @@ export default class NodeRunner {
|
||||
}
|
||||
}
|
||||
|
||||
private handleLoadedManifest(loadedManifest: Manifest) {
|
||||
private handleLoadedManifest(loadedManifest: Manifest | null) {
|
||||
if (!loadedManifest) {
|
||||
return;
|
||||
}
|
||||
@@ -313,6 +320,7 @@ export default class NodeRunner {
|
||||
// - calling "this.useNewManifest(this.newManifest)" here could cause that
|
||||
// that different manifests would be used by different services during given "runIteration" execution.
|
||||
this.newManifest = loadedManifest;
|
||||
loadedManifest = null;
|
||||
} else {
|
||||
logger.info("Loaded manifest same as current, not updating.");
|
||||
}
|
||||
@@ -329,7 +337,7 @@ export default class NodeRunner {
|
||||
version: this.version,
|
||||
addEvmSignature: Boolean(this.nodeConfig.addEvmSignature),
|
||||
});
|
||||
this.newManifest = undefined;
|
||||
this.newManifest = null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
1
src/arweave-multihost.d.ts
vendored
1
src/arweave-multihost.d.ts
vendored
@@ -1 +0,0 @@
|
||||
declare module 'arweave-multihost';
|
||||
@@ -9,19 +9,22 @@ import {
|
||||
import ArweaveProxy from "./ArweaveProxy";
|
||||
import {trackEnd, trackStart} from "../utils/performance-tracker";
|
||||
import Transaction from "arweave/node/lib/transaction";
|
||||
import {interactRead} from "smartweave";
|
||||
|
||||
const logger = require("../utils/logger")("ArweaveService") as Consola;
|
||||
const deepSortObject = require("deep-sort-object");
|
||||
const providersRegistry = require("redstone-smartweave-contracts/src/tools/providers-registry.api");
|
||||
|
||||
export type BalanceCheckResult = { balance: number, isBalanceLow: boolean }
|
||||
|
||||
// Business service that supplies operations required by Redstone-Node.
|
||||
export default class ArweaveService {
|
||||
|
||||
private static readonly CONTRACT_REGISTRY_TX_ID: string = "XQkGzXG6YknJyy-YbakEZvQKAWkW2_aPRhc3ShC8lyA";
|
||||
private static readonly PROVIDERS_REGISTRY_CONTRACT: string = "providers-registry";
|
||||
|
||||
constructor(
|
||||
private arweave: ArweaveProxy,
|
||||
private minBalance: number
|
||||
private readonly arweaveProxy: ArweaveProxy,
|
||||
private readonly minBalance: number
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -34,7 +37,7 @@ export default class ArweaveService {
|
||||
|
||||
const tags = this.prepareTransactionTags(nodeVersion, prices);
|
||||
|
||||
const transaction = await this.arweave.prepareUploadTransaction(tags, prices);
|
||||
const transaction = await this.arweaveProxy.prepareUploadTransaction(tags, prices);
|
||||
trackEnd(transactionPreparingTrackingId);
|
||||
|
||||
return transaction;
|
||||
@@ -42,7 +45,7 @@ export default class ArweaveService {
|
||||
|
||||
async checkBalance(): Promise<BalanceCheckResult> {
|
||||
try {
|
||||
const balance = await this.arweave.getBalance();
|
||||
const balance = await this.arweaveProxy.getBalance();
|
||||
const isBalanceLow = balance < this.minBalance;
|
||||
logger.info(`Balance: ${balance}`);
|
||||
return {balance, isBalanceLow};
|
||||
@@ -60,7 +63,7 @@ export default class ArweaveService {
|
||||
const keepingTrackingId = trackStart("keeping");
|
||||
//TODO: Handle errors in a more sensible way ;-) https://app.clickup.com/t/k38r91
|
||||
try {
|
||||
await this.arweave.postTransaction(arTransaction);
|
||||
await this.arweaveProxy.postTransaction(arTransaction);
|
||||
logger.info(`Transaction posted: ${arTransaction.id}`);
|
||||
} catch (e) {
|
||||
logger.error("Error while storing prices on Arweave", e.stack);
|
||||
@@ -70,15 +73,40 @@ export default class ArweaveService {
|
||||
}
|
||||
|
||||
async getCurrentManifest(): Promise<Manifest> {
|
||||
const jwkAddress = await this.arweave.getAddress();
|
||||
const result = await providersRegistry.currentManifest(jwkAddress, false, this.arweave.jwk);
|
||||
const jwkAddress = await this.arweaveProxy.getAddress();
|
||||
|
||||
const registryInteraction = await interactRead(
|
||||
this.arweaveProxy.arweave,
|
||||
this.arweaveProxy.jwk,
|
||||
ArweaveService.CONTRACT_REGISTRY_TX_ID,
|
||||
{
|
||||
function: "contractsCurrentTxId",
|
||||
data: {
|
||||
contractNames: [ArweaveService.PROVIDERS_REGISTRY_CONTRACT]
|
||||
}
|
||||
});
|
||||
|
||||
const providersRegistryContractTxId = registryInteraction[ArweaveService.PROVIDERS_REGISTRY_CONTRACT];
|
||||
|
||||
const result = await interactRead(
|
||||
this.arweaveProxy.arweave,
|
||||
this.arweaveProxy.jwk,
|
||||
providersRegistryContractTxId,
|
||||
{
|
||||
function: "activeManifest",
|
||||
data: {
|
||||
providerId: jwkAddress,
|
||||
eagerManifestLoad: true
|
||||
}
|
||||
});
|
||||
|
||||
return result.manifest.activeManifestContent;
|
||||
}
|
||||
|
||||
async signPrice(price: PriceDataBeforeSigning): Promise<PriceDataSigned> {
|
||||
const priceWithSortedProps = deepSortObject(price);
|
||||
const priceStringified = JSON.stringify(priceWithSortedProps);
|
||||
const signature = await this.arweave.sign(priceStringified);
|
||||
const signature = await this.arweaveProxy.sign(priceStringified);
|
||||
|
||||
return {
|
||||
...price,
|
||||
|
||||
@@ -13,6 +13,6 @@ export function readJSON(path: string): any {
|
||||
}
|
||||
}
|
||||
|
||||
export function sleep(ms: number): Promise<any> {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
export function timeout(ms: number): Promise<any> {
|
||||
return new Promise(resolve => setTimeout(() => resolve('timeout'), ms));
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import mode from "../../mode";
|
||||
import axios from "axios";
|
||||
import ArweaveService from "../../src/arweave/ArweaveService";
|
||||
import {any} from "jest-mock-extended";
|
||||
import {sleep} from "../../src/utils/objects";
|
||||
import {timeout} from "../../src/utils/objects";
|
||||
|
||||
|
||||
/****** MOCKS START ******/
|
||||
@@ -401,7 +401,7 @@ describe("NodeRunner", () => {
|
||||
jest.useRealTimers();
|
||||
let arServiceSpy = jest.spyOn(ArweaveService.prototype, 'getCurrentManifest')
|
||||
.mockImplementation(async () => {
|
||||
await sleep(200);
|
||||
await timeout(200);
|
||||
return Promise.reject("no way!");
|
||||
})
|
||||
|
||||
|
||||
89
yarn.lock
89
yarn.lock
@@ -1072,13 +1072,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1"
|
||||
integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==
|
||||
|
||||
"@types/axios@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/axios/-/axios-0.14.0.tgz#ec2300fbe7d7dddd7eb9d3abf87999964cafce46"
|
||||
integrity sha1-7CMA++fX3d1+udOr+HmZlkyvzkY=
|
||||
dependencies:
|
||||
axios "*"
|
||||
|
||||
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
|
||||
version "7.1.14"
|
||||
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402"
|
||||
@@ -1424,24 +1417,14 @@ articles@~0.2.1:
|
||||
resolved "https://registry.yarnpkg.com/articles/-/articles-0.2.2.tgz#cc6b429f8cfa811f41e7a08505abbb4e45503197"
|
||||
integrity sha512-S3Y4MPp+LD/l0HHm/4yrr6MoXhUkKT98ZdsV2tkTuBNywqUXEtvJT+NBO3KTSQEttc5EOwEJe2Xw8cZ9TI5Hrw==
|
||||
|
||||
arweave-multihost@^0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/arweave-multihost/-/arweave-multihost-0.0.7.tgz#357349cffba5958fc6480e470f19c154f6bc7dc5"
|
||||
integrity sha512-Wc0jP+mM5E3/1s0CoFdHV2mdDkAgZL6erVSEK3QIU5cuckDYbjwBPe1B/qkwfhouuB6qi34E1YH7ctcPfmgCAw==
|
||||
arweave-multihost@^0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/arweave-multihost/-/arweave-multihost-0.0.8.tgz#3c4409ce511dfb6669889c8bdbfb7347b25397e4"
|
||||
integrity sha512-WoM610lrlZTwmxNjrSFX5p+04wHIJy5O9yxoma/KaKjCynWNgBGi0iJ/akkh/OV1LybqK8vu9Cyxw67sppajZA==
|
||||
dependencies:
|
||||
arweave "^1.10.14"
|
||||
arweave "^1.10.15"
|
||||
axios "^0.21.1"
|
||||
|
||||
arweave@^1.10.11:
|
||||
version "1.10.11"
|
||||
resolved "https://registry.yarnpkg.com/arweave/-/arweave-1.10.11.tgz#59dff46319e258d68f9b921a1f709be457fb7162"
|
||||
integrity sha512-rh3Yhc7Zjf476Lvg4zjvURg1HvdrRej/2528QqQrlej/EocEfHt1/TEM35r3ghDzRBvHLUcMkqIDUwLotS5sUA==
|
||||
dependencies:
|
||||
asn1.js "^5.4.1"
|
||||
axios "^0.21.1"
|
||||
base64-js "^1.3.1"
|
||||
bignumber.js "^9.0.1"
|
||||
|
||||
arweave@^1.10.13, arweave@^1.10.14:
|
||||
version "1.10.14"
|
||||
resolved "https://registry.yarnpkg.com/arweave/-/arweave-1.10.14.tgz#9d34bc92aeb9e974639be51198b697d783bc7927"
|
||||
@@ -1453,6 +1436,17 @@ arweave@^1.10.13, arweave@^1.10.14:
|
||||
base64-js "^1.3.1"
|
||||
bignumber.js "^9.0.1"
|
||||
|
||||
arweave@^1.10.15:
|
||||
version "1.10.15"
|
||||
resolved "https://registry.yarnpkg.com/arweave/-/arweave-1.10.15.tgz#c55d0c6f4eef60a4b89056976af411dcdffa83c8"
|
||||
integrity sha512-dzct71xkkuGIqb3Cp0HI6X9V+5AvhpCLO70MGawPZ5sZ7n1QUrTKeGuOfWOGGMZx4r4vXRxQg33PUiJScDmNhA==
|
||||
dependencies:
|
||||
arconnect "^0.2.8"
|
||||
asn1.js "^5.4.1"
|
||||
axios "^0.21.1"
|
||||
base64-js "^1.3.1"
|
||||
bignumber.js "^9.0.1"
|
||||
|
||||
asn1.js@^5.4.1:
|
||||
version "5.4.1"
|
||||
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
|
||||
@@ -1490,13 +1484,6 @@ aws4@^1.6.0, aws4@^1.8.0:
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
|
||||
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
|
||||
|
||||
axios@*, axios@^0.21.1:
|
||||
version "0.21.1"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
|
||||
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
|
||||
dependencies:
|
||||
follow-redirects "^1.10.0"
|
||||
|
||||
axios@^0.19.2:
|
||||
version "0.19.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
|
||||
@@ -1504,6 +1491,13 @@ axios@^0.19.2:
|
||||
dependencies:
|
||||
follow-redirects "1.5.10"
|
||||
|
||||
axios@^0.21.1:
|
||||
version "0.21.1"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
|
||||
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
|
||||
dependencies:
|
||||
follow-redirects "^1.10.0"
|
||||
|
||||
babel-jest@^27.0.2:
|
||||
version "27.0.2"
|
||||
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.2.tgz#7dc18adb01322acce62c2af76ea2c7cd186ade37"
|
||||
@@ -3508,14 +3502,6 @@ make-error@1.x, make-error@^1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||
|
||||
make-runnable@^1.3.9:
|
||||
version "1.3.10"
|
||||
resolved "https://registry.yarnpkg.com/make-runnable/-/make-runnable-1.3.10.tgz#c89f89e35ffd2dd88fd0ec1b06650e8357577c87"
|
||||
integrity sha512-ec9hxTJip4ncG3TqZrkoR69oKdxFyJDq40A4sGNwGYVtl4Q10V4BhqnTGLUyJxQIxobhTqwxkgEFbGh77RmV7A==
|
||||
dependencies:
|
||||
bluebird "^3.5.0"
|
||||
yargs "^16.2.0"
|
||||
|
||||
makeerror@1.0.x:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
|
||||
@@ -3978,15 +3964,6 @@ redstone-api@^0.4.2:
|
||||
lodash "^4.17.21"
|
||||
pako "^2.0.3"
|
||||
|
||||
redstone-smartweave-contracts@redstone-finance/redstone-smartweave-contracts:
|
||||
version "0.4.0"
|
||||
resolved "https://codeload.github.com/redstone-finance/redstone-smartweave-contracts/tar.gz/ab63bf7b5d4213e1e24a68396bfa9c61c9644044"
|
||||
dependencies:
|
||||
arweave "^1.10.14"
|
||||
make-runnable "^1.3.9"
|
||||
smartweave "0.4.31"
|
||||
testweave-sdk "^0.2.2"
|
||||
|
||||
request-promise-core@1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
|
||||
@@ -4228,15 +4205,15 @@ slash@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
||||
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
|
||||
|
||||
smartweave@0.4.31, smartweave@^0.4.27, smartweave@^0.4.31:
|
||||
version "0.4.31"
|
||||
resolved "https://registry.yarnpkg.com/smartweave/-/smartweave-0.4.31.tgz#d5647cdee11ca7a2ddaddd8384b8f46260d32727"
|
||||
integrity sha512-DOW0AimcxnWGdcCPZm9hpAmwJ79uywcyLxu1HXPlWHEbwaN2TqYf4OgYMZTlHXVXXGk+m7PutUufgkx+Hv+fUQ==
|
||||
smartweave@^0.4.34:
|
||||
version "0.4.34"
|
||||
resolved "https://registry.yarnpkg.com/smartweave/-/smartweave-0.4.34.tgz#5ffaa7f92ce8188d4fa9212bf08179c29b7627ba"
|
||||
integrity sha512-aU/NTgS3ieRQPXJoUunIEyBtB59VPIgZ0/wXm3F4mqMpFgik/3tOYnUOcJITXmUiv0mA6dkVRx95cfuvJ10yZg==
|
||||
dependencies:
|
||||
"@types/clui" "^0.3.0"
|
||||
"@types/inquirer" "^7.3.1"
|
||||
"@weavery/clarity" "^0.1.5"
|
||||
arweave "^1.10.11"
|
||||
arweave "^1.10.15"
|
||||
bignumber.js "^9.0.1"
|
||||
chalk "^4.1.0"
|
||||
clui "^0.3.6"
|
||||
@@ -4433,16 +4410,6 @@ test-exclude@^6.0.0:
|
||||
glob "^7.1.4"
|
||||
minimatch "^3.0.4"
|
||||
|
||||
testweave-sdk@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/testweave-sdk/-/testweave-sdk-0.2.2.tgz#e0539bd24f01726cc405990eab2981f921d242c4"
|
||||
integrity sha512-W1xOpzwFASENctuTcu+j0BCwGS193qkylsUE0KiMbxatbxXTutY78DUQrTJ18AYnWx/zqsaiegHh1gmojA0PCQ==
|
||||
dependencies:
|
||||
"@types/axios" "^0.14.0"
|
||||
arweave "^1.10.11"
|
||||
axios "^0.21.1"
|
||||
smartweave "^0.4.27"
|
||||
|
||||
throat@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
|
||||
|
||||
Reference in New Issue
Block a user