feat: add support for wasm contracts written in Go #116
This commit is contained in:
committed by
Piotr Pędziwiatr
parent
c88ce686a9
commit
cd7fd05f6b
@@ -73,7 +73,7 @@
|
|||||||
"@types/node": "^17.0.21",
|
"@types/node": "^17.0.21",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.29.2",
|
"@typescript-eslint/eslint-plugin": "^4.29.2",
|
||||||
"@typescript-eslint/parser": "^4.29.2",
|
"@typescript-eslint/parser": "^4.29.2",
|
||||||
"arlocal": "1.1.22",
|
"arlocal": "1.1.26",
|
||||||
"cheerio": "^1.0.0-rc.10",
|
"cheerio": "^1.0.0-rc.10",
|
||||||
"cli-table": "0.3.11",
|
"cli-table": "0.3.11",
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
|
|||||||
BIN
src/__tests__/integration/data/wasm/go-pst.wasm
Executable file
BIN
src/__tests__/integration/data/wasm/go-pst.wasm
Executable file
Binary file not shown.
@@ -71,6 +71,7 @@ describe('Testing internal writes', () => {
|
|||||||
'utf8'
|
'utf8'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
console.log("wallet address", walletAddress);
|
||||||
tokenContractTxId = await smartweave.createContract.deploy({
|
tokenContractTxId = await smartweave.createContract.deploy({
|
||||||
wallet,
|
wallet,
|
||||||
initState: JSON.stringify({
|
initState: JSON.stringify({
|
||||||
@@ -195,7 +196,8 @@ describe('Testing internal writes', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('with read states at the end', () => {
|
// TODO: issues with ArLocal - https://github.com/textury/arlocal/issues/83
|
||||||
|
xdescribe('with read states at the end', () => {
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
await deployContracts();
|
await deployContracts();
|
||||||
});
|
});
|
||||||
|
|||||||
225
src/__tests__/integration/wasm/go-deploy-write-read.test.ts
Normal file
225
src/__tests__/integration/wasm/go-deploy-write-read.test.ts
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
|
import ArLocal from 'arlocal';
|
||||||
|
import Arweave from 'arweave';
|
||||||
|
import { JWKInterface } from 'arweave/node/lib/wallet';
|
||||||
|
import {
|
||||||
|
getTag,
|
||||||
|
LoggerFactory,
|
||||||
|
PstContract,
|
||||||
|
PstState,
|
||||||
|
SmartWeave,
|
||||||
|
SmartWeaveNodeFactory,
|
||||||
|
SmartWeaveTags
|
||||||
|
} from '@smartweave';
|
||||||
|
import path from 'path';
|
||||||
|
import { addFunds, mineBlock } from '../_helpers';
|
||||||
|
|
||||||
|
describe('Testing the Go WASM Profit Sharing Token', () => {
|
||||||
|
let wallet: JWKInterface;
|
||||||
|
let walletAddress: string;
|
||||||
|
|
||||||
|
let initialState: PstState;
|
||||||
|
|
||||||
|
let arweave: Arweave;
|
||||||
|
let arlocal: ArLocal;
|
||||||
|
let smartweave: SmartWeave;
|
||||||
|
let pst: PstContract;
|
||||||
|
|
||||||
|
let contractTxId: string;
|
||||||
|
|
||||||
|
let properForeignContractTxId: string;
|
||||||
|
let wrongForeignContractTxId: string;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
// note: each tests suit (i.e. file with tests that Jest is running concurrently
|
||||||
|
// with another files has to have ArLocal set to a different port!)
|
||||||
|
arlocal = new ArLocal(1150, false);
|
||||||
|
await arlocal.start();
|
||||||
|
|
||||||
|
arweave = Arweave.init({
|
||||||
|
host: 'localhost',
|
||||||
|
port: 1150,
|
||||||
|
protocol: 'http'
|
||||||
|
});
|
||||||
|
|
||||||
|
LoggerFactory.INST.logLevel('error');
|
||||||
|
|
||||||
|
smartweave = SmartWeaveNodeFactory.memCached(arweave);
|
||||||
|
|
||||||
|
wallet = await arweave.wallets.generate();
|
||||||
|
await addFunds(arweave, wallet);
|
||||||
|
walletAddress = await arweave.wallets.jwkToAddress(wallet);
|
||||||
|
|
||||||
|
const contractSrc = fs.readFileSync(path.join(__dirname, '../data/wasm/go-pst.wasm'));
|
||||||
|
const stateFromFile: PstState = JSON.parse(fs.readFileSync(path.join(__dirname, '../data/token-pst.json'), 'utf8'));
|
||||||
|
|
||||||
|
initialState = {
|
||||||
|
...stateFromFile,
|
||||||
|
...{
|
||||||
|
owner: walletAddress,
|
||||||
|
balances: {
|
||||||
|
...stateFromFile.balances,
|
||||||
|
[walletAddress]: 555669
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// deploying contract using the new SDK.
|
||||||
|
contractTxId = await smartweave.createContract.deploy({
|
||||||
|
wallet,
|
||||||
|
initState: JSON.stringify(initialState),
|
||||||
|
src: contractSrc
|
||||||
|
});
|
||||||
|
|
||||||
|
properForeignContractTxId = await smartweave.createContract.deploy({
|
||||||
|
wallet,
|
||||||
|
initState: JSON.stringify({
|
||||||
|
...initialState,
|
||||||
|
...{
|
||||||
|
ticker: 'FOREIGN_PST',
|
||||||
|
name: 'foreign contract'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
src: contractSrc
|
||||||
|
});
|
||||||
|
|
||||||
|
wrongForeignContractTxId = await smartweave.createContract.deploy({
|
||||||
|
wallet,
|
||||||
|
initState: JSON.stringify({
|
||||||
|
...initialState,
|
||||||
|
...{
|
||||||
|
ticker: 'FOREIGN_PST_2',
|
||||||
|
name: 'foreign contract 2'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
src: contractSrc
|
||||||
|
});
|
||||||
|
|
||||||
|
// connecting to the PST contract
|
||||||
|
pst = smartweave.pst(contractTxId);
|
||||||
|
|
||||||
|
// connecting wallet to the PST contract
|
||||||
|
pst.connect(wallet);
|
||||||
|
|
||||||
|
await mineBlock(arweave);
|
||||||
|
}, 50000);
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await arlocal.stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly deploy contract', async () => {
|
||||||
|
const contractTx = await arweave.transactions.get(contractTxId);
|
||||||
|
|
||||||
|
console.log(contractTx.id);
|
||||||
|
|
||||||
|
expect(contractTx).not.toBeNull();
|
||||||
|
expect(getTag(contractTx, SmartWeaveTags.CONTRACT_TYPE)).toEqual('wasm');
|
||||||
|
expect(getTag(contractTx, SmartWeaveTags.WASM_LANG)).toEqual('go');
|
||||||
|
|
||||||
|
const contractSrcTx = await arweave.transactions.get(getTag(contractTx, SmartWeaveTags.CONTRACT_SRC_TX_ID));
|
||||||
|
expect(getTag(contractSrcTx, SmartWeaveTags.CONTENT_TYPE)).toEqual('application/wasm');
|
||||||
|
expect(getTag(contractSrcTx, SmartWeaveTags.WASM_LANG)).toEqual('go');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should read pst state and balance data', async () => {
|
||||||
|
expect(await pst.currentState()).toEqual(initialState);
|
||||||
|
|
||||||
|
expect((await pst.currentBalance('uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M')).balance).toEqual(10000000);
|
||||||
|
expect((await pst.currentBalance('33F0QHcb22W7LwWR1iRC8Az1ntZG09XQ03YWuw2ABqA')).balance).toEqual(23111222);
|
||||||
|
expect((await pst.currentBalance(walletAddress)).balance).toEqual(555669);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly transfer tokens', async () => {
|
||||||
|
await pst.transfer({
|
||||||
|
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
||||||
|
qty: 555
|
||||||
|
});
|
||||||
|
|
||||||
|
await mineBlock(arweave);
|
||||||
|
|
||||||
|
expect((await pst.currentState()).balances[walletAddress]).toEqual(555669 - 555);
|
||||||
|
expect((await pst.currentState()).balances['uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M']).toEqual(10000000 + 555);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly view contract state', async () => {
|
||||||
|
const result = (await pst.currentBalance('uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M')).balance;
|
||||||
|
expect(result).toEqual(10000000 + 555);
|
||||||
|
});
|
||||||
|
|
||||||
|
// note: the dummy logic on the test contract should add 1000 tokens
|
||||||
|
// to each address, if the foreign contract state 'ticker' field = 'FOREIGN_PST'
|
||||||
|
it('should properly read foreign contract state', async () => {
|
||||||
|
await pst.writeInteraction({
|
||||||
|
function: 'foreignCall',
|
||||||
|
contractTxId: wrongForeignContractTxId
|
||||||
|
});
|
||||||
|
await mineBlock(arweave);
|
||||||
|
expect((await pst.currentState()).balances[walletAddress]).toEqual(555669 - 555);
|
||||||
|
expect((await pst.currentState()).balances['uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M']).toEqual(10000000 + 555);
|
||||||
|
|
||||||
|
await pst.writeInteraction({
|
||||||
|
function: 'foreignCall',
|
||||||
|
contractTxId: properForeignContractTxId
|
||||||
|
});
|
||||||
|
await mineBlock(arweave);
|
||||||
|
expect((await pst.currentState()).balances[walletAddress]).toEqual(555669 - 555 + 1000);
|
||||||
|
expect((await pst.currentState()).balances['uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M']).toEqual(
|
||||||
|
10000000 + 555 + 1000
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
xit('should return stable gas results', async () => {
|
||||||
|
const results = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
const result = await pst.dryWrite({
|
||||||
|
function: 'transfer',
|
||||||
|
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
||||||
|
qty: 555
|
||||||
|
});
|
||||||
|
results.push(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
results.forEach((result) => {
|
||||||
|
expect(result.gasUsed).toEqual(81158922);
|
||||||
|
});
|
||||||
|
}, 10000);
|
||||||
|
|
||||||
|
it('should properly handle runtime errors', async () => {
|
||||||
|
const result = await pst.dryWrite({
|
||||||
|
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
||||||
|
qty: 555
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.type).toEqual('exception');
|
||||||
|
expect(result.errorMessage).toEqual('[RE:WTF] unknown function: ');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly handle contract errors', async () => {
|
||||||
|
const result = await pst.dryWrite({
|
||||||
|
function: 'transfer',
|
||||||
|
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
||||||
|
qty: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.type).toEqual('error');
|
||||||
|
expect(result.errorMessage).toEqual('[CE:ITQ] invalid transfer qty');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should honor gas limits', async () => {
|
||||||
|
pst.setEvaluationOptions({
|
||||||
|
gasLimit: 9000000
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await pst.dryWrite({
|
||||||
|
function: 'transfer',
|
||||||
|
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
||||||
|
qty: 555
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.type).toEqual('exception');
|
||||||
|
expect(result.errorMessage.startsWith('[RE:OOG] Out of gas!')).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -5,7 +5,6 @@ import Arweave from 'arweave';
|
|||||||
import { JWKInterface } from 'arweave/node/lib/wallet';
|
import { JWKInterface } from 'arweave/node/lib/wallet';
|
||||||
import {
|
import {
|
||||||
getTag,
|
getTag,
|
||||||
InteractionResult,
|
|
||||||
LoggerFactory,
|
LoggerFactory,
|
||||||
PstContract,
|
PstContract,
|
||||||
PstState,
|
PstState,
|
||||||
@@ -171,7 +170,7 @@ describe('Testing the Rust WASM Profit Sharing Token', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return stable gas results', async () => {
|
xit('should return stable gas results', async () => {
|
||||||
const results = [];
|
const results = [];
|
||||||
|
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
@@ -180,10 +179,11 @@ describe('Testing the Rust WASM Profit Sharing Token', () => {
|
|||||||
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
||||||
qty: 555
|
qty: 555
|
||||||
});
|
});
|
||||||
|
results.push(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
results.forEach((result) => {
|
results.forEach((result) => {
|
||||||
expect(result.gasUsed).toEqual(9360178);
|
expect(result.gasUsed).toEqual(9388933);
|
||||||
});
|
});
|
||||||
}, 10000);
|
}, 10000);
|
||||||
|
|
||||||
|
|||||||
@@ -1,135 +1,155 @@
|
|||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
import { ContractData, ContractType, CreateContract, FromSrcTxContractData, SmartWeaveTags } from '@smartweave/core';
|
import {ContractData, ContractType, CreateContract, FromSrcTxContractData, SmartWeaveTags} from '@smartweave/core';
|
||||||
import Arweave from 'arweave';
|
import Arweave from 'arweave';
|
||||||
import { LoggerFactory } from '@smartweave/logging';
|
import {LoggerFactory} from '@smartweave/logging';
|
||||||
import { asWasmImports } from './wasm/as-wasm-imports';
|
import {Go} from "./wasm/go-wasm-imports";
|
||||||
import { rustWasmImports } from './wasm/rust-wasm-imports';
|
import metering from 'redstone-wasm-metering';
|
||||||
|
|
||||||
const wasmTypeMapping: Map<number, string> = new Map([
|
const wasmTypeMapping: Map<number, string> = new Map([
|
||||||
[1, 'assemblyscript'],
|
[1, 'assemblyscript'],
|
||||||
[2, 'rust'],
|
[2, 'rust'],
|
||||||
[3, 'go'],
|
[3, 'go'],
|
||||||
[4, 'swift'],
|
[4, 'swift'],
|
||||||
[5, 'c']
|
[5, 'c']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
export class DefaultCreateContract implements CreateContract {
|
export class DefaultCreateContract implements CreateContract {
|
||||||
private readonly logger = LoggerFactory.INST.create('DefaultCreateContract');
|
private readonly logger = LoggerFactory.INST.create('DefaultCreateContract');
|
||||||
|
|
||||||
constructor(private readonly arweave: Arweave) {
|
constructor(private readonly arweave: Arweave) {
|
||||||
this.deployFromSourceTx = this.deployFromSourceTx.bind(this);
|
this.deployFromSourceTx = this.deployFromSourceTx.bind(this);
|
||||||
}
|
|
||||||
|
|
||||||
async deploy(contractData: ContractData): Promise<string> {
|
|
||||||
this.logger.debug('Creating new contract');
|
|
||||||
|
|
||||||
const { wallet, src, initState, tags, transfer } = contractData;
|
|
||||||
|
|
||||||
const srcTx = await this.arweave.createTransaction({ data: src }, wallet);
|
|
||||||
|
|
||||||
const contractType: ContractType = src instanceof Buffer ? 'wasm' : 'js';
|
|
||||||
|
|
||||||
srcTx.addTag(SmartWeaveTags.APP_NAME, 'SmartWeaveContractSource');
|
|
||||||
// TODO: version should be taken from the current package.json version.
|
|
||||||
srcTx.addTag(SmartWeaveTags.APP_VERSION, '0.3.0');
|
|
||||||
srcTx.addTag(SmartWeaveTags.SDK, 'RedStone');
|
|
||||||
srcTx.addTag(SmartWeaveTags.CONTENT_TYPE, contractType == 'js' ? 'application/javascript' : 'application/wasm');
|
|
||||||
|
|
||||||
let wasmLang = null;
|
|
||||||
|
|
||||||
if (contractType == 'wasm') {
|
|
||||||
const wasmModule = await WebAssembly.compile(src as Buffer);
|
|
||||||
const moduleImports = WebAssembly.Module.imports(wasmModule);
|
|
||||||
const module = await WebAssembly.instantiate(src, dummyImports(moduleImports));
|
|
||||||
// @ts-ignore
|
|
||||||
if (!module.instance.exports.type) {
|
|
||||||
throw new Error(`No info about source type in wasm binary. Did you forget to export "type" function?`);
|
|
||||||
}
|
|
||||||
// @ts-ignore
|
|
||||||
const type = module.instance.exports.type();
|
|
||||||
if (!wasmTypeMapping.has(type)) {
|
|
||||||
throw new Error(`Unknown wasm source type ${type}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
wasmLang = wasmTypeMapping.get(type);
|
|
||||||
|
|
||||||
srcTx.addTag(SmartWeaveTags.WASM_LANG, wasmLang);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.arweave.transactions.sign(srcTx, wallet);
|
async deploy(contractData: ContractData): Promise<string> {
|
||||||
|
this.logger.debug('Creating new contract');
|
||||||
|
|
||||||
this.logger.debug('Posting transaction with source');
|
const {wallet, src, initState, tags, transfer} = contractData;
|
||||||
const response = await this.arweave.transactions.post(srcTx);
|
const contractType: ContractType = src instanceof Buffer ? 'wasm' : 'js';
|
||||||
|
let srcTx;
|
||||||
|
if (contractType == 'wasm') {
|
||||||
|
const meteredWasmBinary = metering.meterWASM(src, {
|
||||||
|
meterType: 'i32'
|
||||||
|
});
|
||||||
|
srcTx = await this.arweave.createTransaction({data: meteredWasmBinary}, wallet);
|
||||||
|
} else {
|
||||||
|
srcTx = await this.arweave.createTransaction({data: src}, wallet);
|
||||||
|
}
|
||||||
|
srcTx.addTag(SmartWeaveTags.APP_NAME, 'SmartWeaveContractSource');
|
||||||
|
// TODO: version should be taken from the current package.json version.
|
||||||
|
srcTx.addTag(SmartWeaveTags.APP_VERSION, '0.3.0');
|
||||||
|
srcTx.addTag(SmartWeaveTags.SDK, 'RedStone');
|
||||||
|
srcTx.addTag(SmartWeaveTags.CONTENT_TYPE, contractType == 'js' ? 'application/javascript' : 'application/wasm');
|
||||||
|
|
||||||
if (response.status === 200 || response.status === 208) {
|
let wasmLang = null;
|
||||||
return await this.deployFromSourceTx({
|
|
||||||
srcTxId: srcTx.id,
|
|
||||||
wallet,
|
|
||||||
initState,
|
|
||||||
contractType,
|
|
||||||
wasmLang,
|
|
||||||
tags,
|
|
||||||
transfer
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
throw new Error('Unable to write Contract Source.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async deployFromSourceTx(contractData: FromSrcTxContractData): Promise<string> {
|
if (contractType == 'wasm') {
|
||||||
this.logger.debug('Creating new contract from src tx');
|
const wasmModule = await WebAssembly.compile(src as Buffer);
|
||||||
|
const moduleImports = WebAssembly.Module.imports(wasmModule);
|
||||||
|
let type;
|
||||||
|
if (this.isGoModule(moduleImports)) {
|
||||||
|
const go = new Go(null);
|
||||||
|
const module = new WebAssembly.Instance(wasmModule, go.importObject);
|
||||||
|
// DO NOT await here!
|
||||||
|
go.run(module);
|
||||||
|
type = go.exports.contractType();
|
||||||
|
} else {
|
||||||
|
const module = await WebAssembly.instantiate(src, dummyImports(moduleImports));
|
||||||
|
// @ts-ignore
|
||||||
|
if (!module.instance.exports.type) {
|
||||||
|
throw new Error(`No info about source type in wasm binary. Did you forget to export "type" function?`);
|
||||||
|
}
|
||||||
|
// @ts-ignore
|
||||||
|
type = module.instance.exports.type();
|
||||||
|
if (!wasmTypeMapping.has(type)) {
|
||||||
|
throw new Error(`Unknown wasm source type ${type}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const { wallet, srcTxId, initState, tags, transfer } = contractData;
|
wasmLang = wasmTypeMapping.get(type);
|
||||||
|
srcTx.addTag(SmartWeaveTags.WASM_LANG, wasmLang);
|
||||||
|
}
|
||||||
|
|
||||||
let contractTX = await this.arweave.createTransaction({ data: initState }, wallet);
|
await this.arweave.transactions.sign(srcTx, wallet);
|
||||||
|
|
||||||
if (+transfer?.winstonQty > 0 && transfer.target.length) {
|
this.logger.debug('Posting transaction with source');
|
||||||
this.logger.debug('Creating additional transaction with AR transfer', transfer);
|
const response = await this.arweave.transactions.post(srcTx);
|
||||||
contractTX = await this.arweave.createTransaction(
|
|
||||||
{
|
if (response.status === 200 || response.status === 208) {
|
||||||
data: initState,
|
return await this.deployFromSourceTx({
|
||||||
target: transfer.target,
|
srcTxId: srcTx.id,
|
||||||
quantity: transfer.winstonQty
|
wallet,
|
||||||
},
|
initState,
|
||||||
wallet
|
contractType,
|
||||||
);
|
wasmLang,
|
||||||
|
tags,
|
||||||
|
transfer
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
throw new Error('Unable to write Contract Source.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tags?.length) {
|
private isGoModule(moduleImports: WebAssembly.ModuleImportDescriptor[]) {
|
||||||
for (const tag of tags) {
|
return moduleImports.some(moduleImport => {
|
||||||
contractTX.addTag(tag.name.toString(), tag.value.toString());
|
return moduleImport.module == 'env' && moduleImport.name.startsWith('syscall/js');
|
||||||
}
|
});
|
||||||
}
|
|
||||||
contractTX.addTag(SmartWeaveTags.APP_NAME, 'SmartWeaveContract');
|
|
||||||
contractTX.addTag(SmartWeaveTags.APP_VERSION, '0.3.0');
|
|
||||||
contractTX.addTag(SmartWeaveTags.CONTRACT_SRC_TX_ID, srcTxId);
|
|
||||||
contractTX.addTag(SmartWeaveTags.SDK, 'RedStone');
|
|
||||||
contractTX.addTag(SmartWeaveTags.CONTENT_TYPE, 'application/json');
|
|
||||||
contractTX.addTag(SmartWeaveTags.CONTRACT_TYPE, contractData.contractType);
|
|
||||||
if (contractData.contractType == 'wasm') {
|
|
||||||
contractTX.addTag(SmartWeaveTags.WASM_LANG, contractData.wasmLang);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.arweave.transactions.sign(contractTX, wallet);
|
async deployFromSourceTx(contractData: FromSrcTxContractData): Promise<string> {
|
||||||
|
this.logger.debug('Creating new contract from src tx');
|
||||||
|
|
||||||
const response = await this.arweave.transactions.post(contractTX);
|
const {wallet, srcTxId, initState, tags, transfer} = contractData;
|
||||||
if (response.status === 200 || response.status === 208) {
|
|
||||||
return contractTX.id;
|
let contractTX = await this.arweave.createTransaction({data: initState}, wallet);
|
||||||
} else {
|
|
||||||
throw new Error('Unable to write Contract Initial State');
|
if (+transfer?.winstonQty > 0 && transfer.target.length) {
|
||||||
|
this.logger.debug('Creating additional transaction with AR transfer', transfer);
|
||||||
|
contractTX = await this.arweave.createTransaction(
|
||||||
|
{
|
||||||
|
data: initState,
|
||||||
|
target: transfer.target,
|
||||||
|
quantity: transfer.winstonQty
|
||||||
|
},
|
||||||
|
wallet
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tags?.length) {
|
||||||
|
for (const tag of tags) {
|
||||||
|
contractTX.addTag(tag.name.toString(), tag.value.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
contractTX.addTag(SmartWeaveTags.APP_NAME, 'SmartWeaveContract');
|
||||||
|
contractTX.addTag(SmartWeaveTags.APP_VERSION, '0.3.0');
|
||||||
|
contractTX.addTag(SmartWeaveTags.CONTRACT_SRC_TX_ID, srcTxId);
|
||||||
|
contractTX.addTag(SmartWeaveTags.SDK, 'RedStone');
|
||||||
|
contractTX.addTag(SmartWeaveTags.CONTENT_TYPE, 'application/json');
|
||||||
|
contractTX.addTag(SmartWeaveTags.CONTRACT_TYPE, contractData.contractType);
|
||||||
|
if (contractData.contractType == 'wasm') {
|
||||||
|
contractTX.addTag(SmartWeaveTags.WASM_LANG, contractData.wasmLang);
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.arweave.transactions.sign(contractTX, wallet);
|
||||||
|
|
||||||
|
const response = await this.arweave.transactions.post(contractTX);
|
||||||
|
if (response.status === 200 || response.status === 208) {
|
||||||
|
return contractTX.id;
|
||||||
|
} else {
|
||||||
|
throw new Error('Unable to write Contract Initial State');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function dummyImports(moduleImports: WebAssembly.ModuleImportDescriptor[]) {
|
function dummyImports(moduleImports: WebAssembly.ModuleImportDescriptor[]) {
|
||||||
const imports = {};
|
const imports = {};
|
||||||
|
|
||||||
moduleImports.forEach((moduleImport) => {
|
moduleImports.forEach((moduleImport) => {
|
||||||
if (!Object.prototype.hasOwnProperty.call(imports, moduleImport.module)) {
|
if (!Object.prototype.hasOwnProperty.call(imports, moduleImport.module)) {
|
||||||
imports[moduleImport.module] = {};
|
imports[moduleImport.module] = {};
|
||||||
}
|
}
|
||||||
imports[moduleImport.module][moduleImport.name] = function () {};
|
imports[moduleImport.module][moduleImport.name] = function () {
|
||||||
});
|
};
|
||||||
|
});
|
||||||
|
|
||||||
return imports;
|
return imports;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ export abstract class DefaultStateEvaluator implements StateEvaluator {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (newState !== null) {
|
if (newState !== null) {
|
||||||
currentState = deepCopy(newState.cachedValue.state);
|
currentState = newState.cachedValue.state;
|
||||||
validity[interactionTx.id] = newState.cachedValue.validity[interactionTx.id];
|
validity[interactionTx.id] = newState.cachedValue.validity[interactionTx.id];
|
||||||
|
|
||||||
const toCache = new EvalStateResult(currentState, validity);
|
const toCache = new EvalStateResult(currentState, validity);
|
||||||
|
|||||||
@@ -1,20 +1,23 @@
|
|||||||
import Arweave from 'arweave';
|
import Arweave from 'arweave';
|
||||||
import {
|
import {
|
||||||
|
Benchmark,
|
||||||
ContractDefinition,
|
ContractDefinition,
|
||||||
EvalStateResult,
|
EvalStateResult,
|
||||||
ExecutionContext,
|
ExecutionContext,
|
||||||
ExecutorFactory,
|
ExecutorFactory,
|
||||||
GQLNodeInterface,
|
GQLNodeInterface,
|
||||||
LoggerFactory,
|
LoggerFactory,
|
||||||
|
MemCache,
|
||||||
normalizeContractSource,
|
normalizeContractSource,
|
||||||
SmartWeaveGlobal
|
SmartWeaveGlobal,
|
||||||
|
SwCache
|
||||||
} from '@smartweave';
|
} from '@smartweave';
|
||||||
import { ContractHandlerApi } from './ContractHandlerApi';
|
import { ContractHandlerApi } from './ContractHandlerApi';
|
||||||
import loader from '@assemblyscript/loader';
|
import loader from '@assemblyscript/loader';
|
||||||
import { WasmContractHandlerApi } from './WasmContractHandlerApi';
|
import { WasmContractHandlerApi } from './WasmContractHandlerApi';
|
||||||
import metering from 'redstone-wasm-metering';
|
|
||||||
import { asWasmImports } from './wasm/as-wasm-imports';
|
import { asWasmImports } from './wasm/as-wasm-imports';
|
||||||
import { rustWasmImports } from './wasm/rust-wasm-imports';
|
import { rustWasmImports } from './wasm/rust-wasm-imports';
|
||||||
|
import { Go } from './wasm/go-wasm-imports';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A factory that produces handlers that are compatible with the "current" style of
|
* A factory that produces handlers that are compatible with the "current" style of
|
||||||
@@ -22,6 +25,7 @@ import { rustWasmImports } from './wasm/rust-wasm-imports';
|
|||||||
*/
|
*/
|
||||||
export class HandlerExecutorFactory implements ExecutorFactory<HandlerApi<unknown>> {
|
export class HandlerExecutorFactory implements ExecutorFactory<HandlerApi<unknown>> {
|
||||||
private readonly logger = LoggerFactory.INST.create('HandlerExecutorFactory');
|
private readonly logger = LoggerFactory.INST.create('HandlerExecutorFactory');
|
||||||
|
private readonly cache: SwCache<string, WebAssembly.Module> = new MemCache();
|
||||||
|
|
||||||
constructor(private readonly arweave: Arweave) {}
|
constructor(private readonly arweave: Arweave) {}
|
||||||
|
|
||||||
@@ -34,12 +38,9 @@ export class HandlerExecutorFactory implements ExecutorFactory<HandlerApi<unknow
|
|||||||
if (contractDefinition.contractType == 'wasm') {
|
if (contractDefinition.contractType == 'wasm') {
|
||||||
this.logger.info('Creating handler for wasm contract', contractDefinition.txId);
|
this.logger.info('Creating handler for wasm contract', contractDefinition.txId);
|
||||||
|
|
||||||
const meteredWasmBinary = metering.meterWASM(contractDefinition.srcBinary, {
|
const benchmark = Benchmark.measure();
|
||||||
meterType: 'i32'
|
|
||||||
});
|
|
||||||
|
|
||||||
let wasmInstance;
|
let wasmInstance;
|
||||||
|
|
||||||
let jsExports = null;
|
let jsExports = null;
|
||||||
|
|
||||||
switch (contractDefinition.srcWasmLang) {
|
switch (contractDefinition.srcWasmLang) {
|
||||||
@@ -47,7 +48,10 @@ export class HandlerExecutorFactory implements ExecutorFactory<HandlerApi<unknow
|
|||||||
const wasmInstanceExports = {
|
const wasmInstanceExports = {
|
||||||
exports: null
|
exports: null
|
||||||
};
|
};
|
||||||
wasmInstance = loader.instantiateSync(meteredWasmBinary, asWasmImports(swGlobal, wasmInstanceExports));
|
wasmInstance = loader.instantiateSync(
|
||||||
|
contractDefinition.srcBinary,
|
||||||
|
asWasmImports(swGlobal, wasmInstanceExports)
|
||||||
|
);
|
||||||
// note: well, exports are required by some imports
|
// note: well, exports are required by some imports
|
||||||
// - e.g. those that use wasmModule.exports.__newString underneath (like Block.indep_hash)
|
// - e.g. those that use wasmModule.exports.__newString underneath (like Block.indep_hash)
|
||||||
wasmInstanceExports.exports = wasmInstance.exports;
|
wasmInstanceExports.exports = wasmInstance.exports;
|
||||||
@@ -70,7 +74,7 @@ export class HandlerExecutorFactory implements ExecutorFactory<HandlerApi<unknow
|
|||||||
* to NOT mangle the import function names - unfortunately that is not currently possible
|
* to NOT mangle the import function names - unfortunately that is not currently possible
|
||||||
* - https://github.com/rustwasm/wasm-bindgen/issues/1128
|
* - https://github.com/rustwasm/wasm-bindgen/issues/1128
|
||||||
*/
|
*/
|
||||||
const wasmModule = await WebAssembly.compile(meteredWasmBinary);
|
const wasmModule: WebAssembly.Module = await WebAssembly.compile(contractDefinition.srcBinary);
|
||||||
const moduleImports = WebAssembly.Module.imports(wasmModule);
|
const moduleImports = WebAssembly.Module.imports(wasmModule);
|
||||||
const wbindgenImports = moduleImports
|
const wbindgenImports = moduleImports
|
||||||
.filter((imp) => {
|
.filter((imp) => {
|
||||||
@@ -85,11 +89,29 @@ export class HandlerExecutorFactory implements ExecutorFactory<HandlerApi<unknow
|
|||||||
wasmInstanceExports.exports = wasmInstance.exports;
|
wasmInstanceExports.exports = wasmInstance.exports;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'go': {
|
||||||
|
const go = new Go(swGlobal);
|
||||||
|
go.importObject.metering = {
|
||||||
|
usegas: function (value) {
|
||||||
|
swGlobal.useGas(value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const wasmModule = await WebAssembly.compile(contractDefinition.srcBinary);
|
||||||
|
wasmInstance = new WebAssembly.Instance(wasmModule, go.importObject);
|
||||||
|
|
||||||
|
// nope - DO NOT await here!
|
||||||
|
go.run(wasmInstance);
|
||||||
|
jsExports = go.exports;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`Support for ${contractDefinition.srcWasmLang} not implemented yet.`);
|
throw new Error(`Support for ${contractDefinition.srcWasmLang} not implemented yet.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.logger.info(`WASM ${contractDefinition.srcWasmLang} handler created in ${benchmark.elapsed()}`);
|
||||||
|
|
||||||
return new WasmContractHandlerApi(swGlobal, contractDefinition, jsExports || wasmInstance.exports);
|
return new WasmContractHandlerApi(swGlobal, contractDefinition, jsExports || wasmInstance.exports);
|
||||||
} else {
|
} else {
|
||||||
this.logger.info('Creating handler for js contract', contractDefinition.txId);
|
this.logger.info('Creating handler for js contract', contractDefinition.txId);
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ export class WasmContractHandlerApi<State> implements HandlerApi<State> {
|
|||||||
this.swGlobal.gasUsed = 0;
|
this.swGlobal.gasUsed = 0;
|
||||||
|
|
||||||
this.assignReadContractState<Input>(executionContext, currentTx, currentResult, interactionTx);
|
this.assignReadContractState<Input>(executionContext, currentTx, currentResult, interactionTx);
|
||||||
|
|
||||||
const handlerResult = await this.doHandle(interaction);
|
const handlerResult = await this.doHandle(interaction);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -94,6 +93,10 @@ export class WasmContractHandlerApi<State> implements HandlerApi<State> {
|
|||||||
this.wasmExports.initState(state);
|
this.wasmExports.initState(state);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "go": {
|
||||||
|
this.wasmExports.initState(stringify(state));
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`Support for ${this.contractDefinition.srcWasmLang} not implemented yet.`);
|
throw new Error(`Support for ${this.contractDefinition.srcWasmLang} not implemented yet.`);
|
||||||
}
|
}
|
||||||
@@ -134,6 +137,10 @@ export class WasmContractHandlerApi<State> implements HandlerApi<State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case "go": {
|
||||||
|
const result = await this.wasmExports.handle(stringify(action.input));
|
||||||
|
return JSON.parse(result);
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`Support for ${this.contractDefinition.srcWasmLang} not implemented yet.`);
|
throw new Error(`Support for ${this.contractDefinition.srcWasmLang} not implemented yet.`);
|
||||||
}
|
}
|
||||||
@@ -149,6 +156,10 @@ export class WasmContractHandlerApi<State> implements HandlerApi<State> {
|
|||||||
case 'rust': {
|
case 'rust': {
|
||||||
return this.wasmExports.currentState();
|
return this.wasmExports.currentState();
|
||||||
}
|
}
|
||||||
|
case "go": {
|
||||||
|
const result = this.wasmExports.currentState();
|
||||||
|
return JSON.parse(result);
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`Support for ${this.contractDefinition.srcWasmLang} not implemented yet.`);
|
throw new Error(`Support for ${this.contractDefinition.srcWasmLang} not implemented yet.`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { LoggerFactory, SmartWeaveGlobal } from '@smartweave';
|
import { LoggerFactory, SmartWeaveGlobal } from '@smartweave';
|
||||||
|
|
||||||
export const asWasmImports = (swGlobal: SmartWeaveGlobal, wasmInstance: any): any => {
|
export const asWasmImports = (swGlobal: SmartWeaveGlobal, wasmInstance: any): any => {
|
||||||
const wasmLogger = LoggerFactory.INST.create('WASM');
|
const wasmLogger = LoggerFactory.INST.create('WASM:AS');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
metering: {
|
metering: {
|
||||||
|
|||||||
502
src/core/modules/impl/wasm/go-wasm-imports.ts
Normal file
502
src/core/modules/impl/wasm/go-wasm-imports.ts
Normal file
@@ -0,0 +1,502 @@
|
|||||||
|
// Copyright 2018 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
//
|
||||||
|
// This file has been modified for use by the TinyGo compiler.
|
||||||
|
|
||||||
|
// note: this file has been further modified to be used
|
||||||
|
// with RedStone SmartWeave SDK.
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/* YOLO */
|
||||||
|
import {LoggerFactory, SmartWeaveGlobal} from "@smartweave";
|
||||||
|
|
||||||
|
const encoder = new TextEncoder();
|
||||||
|
const decoder = new TextDecoder("utf-8");
|
||||||
|
let logLine = [];
|
||||||
|
|
||||||
|
let globalJsModule;
|
||||||
|
|
||||||
|
// crying while committing...
|
||||||
|
(function (global) {
|
||||||
|
globalJsModule = global;
|
||||||
|
globalJsModule.redstone = {
|
||||||
|
go: {}
|
||||||
|
};
|
||||||
|
}).call(
|
||||||
|
this,
|
||||||
|
typeof global !== 'undefined'
|
||||||
|
? global
|
||||||
|
: typeof self !== 'undefined'
|
||||||
|
? self
|
||||||
|
: typeof window !== 'undefined'
|
||||||
|
? window
|
||||||
|
: {});
|
||||||
|
|
||||||
|
export class Go {
|
||||||
|
private _callbackTimeouts: Map<any, any>;
|
||||||
|
private _nextCallbackTimeoutID: number;
|
||||||
|
private _inst: any;
|
||||||
|
private _values: any;
|
||||||
|
private _ids: any;
|
||||||
|
private _idPool: any;
|
||||||
|
private _goRefCounts: any;
|
||||||
|
importObject: any;
|
||||||
|
private exited: boolean;
|
||||||
|
private _resolveCallbackPromise: () => void;
|
||||||
|
private _pendingEvent: any;
|
||||||
|
private _id: string;
|
||||||
|
public exports: any;
|
||||||
|
|
||||||
|
constructor(swGlobal: SmartWeaveGlobal) {
|
||||||
|
this._callbackTimeouts = new Map();
|
||||||
|
this._nextCallbackTimeoutID = 1;
|
||||||
|
|
||||||
|
const wasmLogger = LoggerFactory.INST.create('WASM:Go');
|
||||||
|
|
||||||
|
let go = this;
|
||||||
|
// it is safe to redeclare this for each new module in the global scope
|
||||||
|
// - this function is called only during module initialization.
|
||||||
|
globalJsModule.redstone.go = {
|
||||||
|
WasmModule: {
|
||||||
|
registerWasmModule: function (moduleId) {
|
||||||
|
go._id = moduleId;
|
||||||
|
go.exports = globalJsModule[moduleId];
|
||||||
|
delete globalJsModule[moduleId];
|
||||||
|
|
||||||
|
globalJsModule.redstone.go[moduleId] = {};
|
||||||
|
globalJsModule.redstone.go[moduleId].imports = {
|
||||||
|
console: {
|
||||||
|
log: function (...args) {
|
||||||
|
wasmLogger.debug(args[0], ...args.slice(1));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Transaction: {
|
||||||
|
id: function () {
|
||||||
|
return swGlobal.transaction.id;
|
||||||
|
},
|
||||||
|
owner: function () {
|
||||||
|
return swGlobal.transaction.owner;
|
||||||
|
},
|
||||||
|
target: function () {
|
||||||
|
return swGlobal.transaction.target;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Block: {
|
||||||
|
indep_hash: function () {
|
||||||
|
return swGlobal.block.indep_hash;
|
||||||
|
},
|
||||||
|
height: function () {
|
||||||
|
return swGlobal.block.height;
|
||||||
|
},
|
||||||
|
timestamp: function () {
|
||||||
|
return swGlobal.block.timestamp;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Contract: {
|
||||||
|
id: function () {
|
||||||
|
return swGlobal.contract.id;
|
||||||
|
},
|
||||||
|
owner: function () {
|
||||||
|
return swGlobal.contract.owner;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
SmartWeave: {
|
||||||
|
readContractState: async function (contractTxId) {
|
||||||
|
return await swGlobal.contracts.readContractState(contractTxId);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const mem = () => {
|
||||||
|
// The buffer may change when requesting more memory.
|
||||||
|
return new DataView(this._inst.exports.memory.buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
const setInt64 = (addr, v) => {
|
||||||
|
mem().setUint32(addr + 0, v, true);
|
||||||
|
mem().setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const getInt64 = (addr) => {
|
||||||
|
const low = mem().getUint32(addr + 0, true);
|
||||||
|
const high = mem().getInt32(addr + 4, true);
|
||||||
|
return low + high * 4294967296;
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadValue = (addr) => {
|
||||||
|
const f = mem().getFloat64(addr, true);
|
||||||
|
if (f === 0) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
if (!isNaN(f)) {
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
const id = mem().getUint32(addr, true);
|
||||||
|
return this._values[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
const storeValue = (addr, v) => {
|
||||||
|
const nanHead = 0x7FF80000;
|
||||||
|
|
||||||
|
if (typeof v === "number") {
|
||||||
|
if (isNaN(v)) {
|
||||||
|
mem().setUint32(addr + 4, nanHead, true);
|
||||||
|
mem().setUint32(addr, 0, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (v === 0) {
|
||||||
|
mem().setUint32(addr + 4, nanHead, true);
|
||||||
|
mem().setUint32(addr, 1, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mem().setFloat64(addr, v, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (v) {
|
||||||
|
case undefined:
|
||||||
|
mem().setFloat64(addr, 0, true);
|
||||||
|
return;
|
||||||
|
case null:
|
||||||
|
mem().setUint32(addr + 4, nanHead, true);
|
||||||
|
mem().setUint32(addr, 2, true);
|
||||||
|
return;
|
||||||
|
case true:
|
||||||
|
mem().setUint32(addr + 4, nanHead, true);
|
||||||
|
mem().setUint32(addr, 3, true);
|
||||||
|
return;
|
||||||
|
case false:
|
||||||
|
mem().setUint32(addr + 4, nanHead, true);
|
||||||
|
mem().setUint32(addr, 4, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let id = this._ids.get(v);
|
||||||
|
if (id === undefined) {
|
||||||
|
id = this._idPool.pop();
|
||||||
|
if (id === undefined) {
|
||||||
|
id = this._values.length;
|
||||||
|
}
|
||||||
|
this._values[id] = v;
|
||||||
|
this._goRefCounts[id] = 0;
|
||||||
|
this._ids.set(v, id);
|
||||||
|
}
|
||||||
|
this._goRefCounts[id]++;
|
||||||
|
let typeFlag = 1;
|
||||||
|
switch (typeof v) {
|
||||||
|
case "string":
|
||||||
|
typeFlag = 2;
|
||||||
|
break;
|
||||||
|
case "symbol":
|
||||||
|
typeFlag = 3;
|
||||||
|
break;
|
||||||
|
case "function":
|
||||||
|
typeFlag = 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mem().setUint32(addr + 4, nanHead | typeFlag, true);
|
||||||
|
mem().setUint32(addr, id, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadSlice = (array, len, cap = null) => {
|
||||||
|
return new Uint8Array(this._inst.exports.memory.buffer, array, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadSliceOfValues = (array, len, cap) => {
|
||||||
|
const a = new Array(len);
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
a[i] = loadValue(array + i * 8);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadString = (ptr, len) => {
|
||||||
|
return decoder.decode(new DataView(this._inst.exports.memory.buffer, ptr, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
const timeOrigin = Date.now() - performance.now();
|
||||||
|
this.importObject = {
|
||||||
|
wasi_snapshot_preview1: {
|
||||||
|
// https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md#fd_write
|
||||||
|
fd_write: function (fd, iovs_ptr, iovs_len, nwritten_ptr) {
|
||||||
|
let nwritten = 0;
|
||||||
|
if (fd == 1) {
|
||||||
|
for (let iovs_i = 0; iovs_i < iovs_len; iovs_i++) {
|
||||||
|
let iov_ptr = iovs_ptr + iovs_i * 8; // assuming wasm32
|
||||||
|
let ptr = mem().getUint32(iov_ptr + 0, true);
|
||||||
|
let len = mem().getUint32(iov_ptr + 4, true);
|
||||||
|
nwritten += len;
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
let c = mem().getUint8(ptr + i);
|
||||||
|
if (c == 13) { // CR
|
||||||
|
// ignore
|
||||||
|
} else if (c == 10) { // LF
|
||||||
|
// write line
|
||||||
|
let line = decoder.decode(new Uint8Array(logLine));
|
||||||
|
logLine = [];
|
||||||
|
console.log(line);
|
||||||
|
} else {
|
||||||
|
logLine.push(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error('invalid file descriptor:', fd);
|
||||||
|
}
|
||||||
|
mem().setUint32(nwritten_ptr, nwritten, true);
|
||||||
|
return 0;
|
||||||
|
},
|
||||||
|
fd_close: () => 0, // dummy
|
||||||
|
fd_fdstat_get: () => 0, // dummy
|
||||||
|
fd_seek: () => 0, // dummy
|
||||||
|
"proc_exit": (code) => {
|
||||||
|
// @ts-ignore
|
||||||
|
if (global.process) {
|
||||||
|
// Node.js
|
||||||
|
process.exit(code);
|
||||||
|
} else {
|
||||||
|
// Can't exit in a browser.
|
||||||
|
throw 'trying to exit with code ' + code;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
random_get: (bufPtr, bufLen) => {
|
||||||
|
crypto.getRandomValues(loadSlice(bufPtr, bufLen, null));
|
||||||
|
return 0;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
env: {
|
||||||
|
// func ticks() float64
|
||||||
|
"runtime.ticks": () => {
|
||||||
|
return timeOrigin + performance.now();
|
||||||
|
},
|
||||||
|
|
||||||
|
// func sleepTicks(timeout float64)
|
||||||
|
"runtime.sleepTicks": (timeout) => {
|
||||||
|
// Do not sleep, only reactivate scheduler after the given timeout.
|
||||||
|
setTimeout(this._inst.exports.go_scheduler, timeout);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func finalizeRef(v ref)
|
||||||
|
// https://github.com/tinygo-org/tinygo/issues/1140#issuecomment-718145455
|
||||||
|
"syscall/js.finalizeRef": (v_addr) => {
|
||||||
|
// Note: TinyGo does not support finalizers so this is only called
|
||||||
|
// for one specific case, by js.go:jsString.
|
||||||
|
const id = mem().getUint32(v_addr, true);
|
||||||
|
this._goRefCounts[id]--;
|
||||||
|
if (this._goRefCounts[id] === 0) {
|
||||||
|
const v = this._values[id];
|
||||||
|
this._values[id] = null;
|
||||||
|
this._ids.delete(v);
|
||||||
|
this._idPool.push(id);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func stringVal(value string) ref
|
||||||
|
"syscall/js.stringVal": (ret_ptr, value_ptr, value_len) => {
|
||||||
|
const s = loadString(value_ptr, value_len);
|
||||||
|
storeValue(ret_ptr, s);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueGet(v ref, p string) ref
|
||||||
|
"syscall/js.valueGet": (retval, v_addr, p_ptr, p_len) => {
|
||||||
|
let prop = loadString(p_ptr, p_len);
|
||||||
|
let value = loadValue(v_addr);
|
||||||
|
let result = Reflect.get(value, prop);
|
||||||
|
storeValue(retval, result);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueSet(v ref, p string, x ref)
|
||||||
|
"syscall/js.valueSet": (v_addr, p_ptr, p_len, x_addr) => {
|
||||||
|
const v = loadValue(v_addr);
|
||||||
|
const p = loadString(p_ptr, p_len);
|
||||||
|
const x = loadValue(x_addr);
|
||||||
|
Reflect.set(v, p, x);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueDelete(v ref, p string)
|
||||||
|
"syscall/js.valueDelete": (v_addr, p_ptr, p_len) => {
|
||||||
|
const v = loadValue(v_addr);
|
||||||
|
const p = loadString(p_ptr, p_len);
|
||||||
|
Reflect.deleteProperty(v, p);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueIndex(v ref, i int) ref
|
||||||
|
"syscall/js.valueIndex": (ret_addr, v_addr, i) => {
|
||||||
|
storeValue(ret_addr, Reflect.get(loadValue(v_addr), i));
|
||||||
|
},
|
||||||
|
|
||||||
|
// valueSetIndex(v ref, i int, x ref)
|
||||||
|
"syscall/js.valueSetIndex": (v_addr, i, x_addr) => {
|
||||||
|
Reflect.set(loadValue(v_addr), i, loadValue(x_addr));
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueCall(v ref, m string, args []ref) (ref, bool)
|
||||||
|
"syscall/js.valueCall": (ret_addr, v_addr, m_ptr, m_len, args_ptr, args_len, args_cap) => {
|
||||||
|
const v = loadValue(v_addr);
|
||||||
|
const name = loadString(m_ptr, m_len);
|
||||||
|
const args = loadSliceOfValues(args_ptr, args_len, args_cap);
|
||||||
|
try {
|
||||||
|
const m = Reflect.get(v, name);
|
||||||
|
storeValue(ret_addr, Reflect.apply(m, v, args));
|
||||||
|
mem().setUint8(ret_addr + 8, 1);
|
||||||
|
} catch (err) {
|
||||||
|
storeValue(ret_addr, err);
|
||||||
|
mem().setUint8(ret_addr + 8, 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueInvoke(v ref, args []ref) (ref, bool)
|
||||||
|
"syscall/js.valueInvoke": (ret_addr, v_addr, args_ptr, args_len, args_cap) => {
|
||||||
|
try {
|
||||||
|
const v = loadValue(v_addr);
|
||||||
|
const args = loadSliceOfValues(args_ptr, args_len, args_cap);
|
||||||
|
storeValue(ret_addr, Reflect.apply(v, undefined, args));
|
||||||
|
mem().setUint8(ret_addr + 8, 1);
|
||||||
|
} catch (err) {
|
||||||
|
storeValue(ret_addr, err);
|
||||||
|
mem().setUint8(ret_addr + 8, 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueNew(v ref, args []ref) (ref, bool)
|
||||||
|
"syscall/js.valueNew": (ret_addr, v_addr, args_ptr, args_len, args_cap) => {
|
||||||
|
const v = loadValue(v_addr);
|
||||||
|
const args = loadSliceOfValues(args_ptr, args_len, args_cap);
|
||||||
|
try {
|
||||||
|
storeValue(ret_addr, Reflect.construct(v, args));
|
||||||
|
mem().setUint8(ret_addr + 8, 1);
|
||||||
|
} catch (err) {
|
||||||
|
storeValue(ret_addr, err);
|
||||||
|
mem().setUint8(ret_addr + 8, 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueLength(v ref) int
|
||||||
|
"syscall/js.valueLength": (v_addr) => {
|
||||||
|
return loadValue(v_addr).length;
|
||||||
|
},
|
||||||
|
|
||||||
|
// valuePrepareString(v ref) (ref, int)
|
||||||
|
"syscall/js.valuePrepareString": (ret_addr, v_addr) => {
|
||||||
|
const s = String(loadValue(v_addr));
|
||||||
|
const str = encoder.encode(s);
|
||||||
|
storeValue(ret_addr, str);
|
||||||
|
setInt64(ret_addr + 8, str.length);
|
||||||
|
},
|
||||||
|
|
||||||
|
// valueLoadString(v ref, b []byte)
|
||||||
|
"syscall/js.valueLoadString": (v_addr, slice_ptr, slice_len, slice_cap) => {
|
||||||
|
const str = loadValue(v_addr);
|
||||||
|
loadSlice(slice_ptr, slice_len, slice_cap).set(str);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func valueInstanceOf(v ref, t ref) bool
|
||||||
|
"syscall/js.valueInstanceOf": (v_addr, t_addr) => {
|
||||||
|
return loadValue(v_addr) instanceof loadValue(t_addr);
|
||||||
|
},
|
||||||
|
|
||||||
|
// func copyBytesToGo(dst []byte, src ref) (int, bool)
|
||||||
|
"syscall/js.copyBytesToGo": (ret_addr, dest_addr, dest_len, dest_cap, source_addr) => {
|
||||||
|
let num_bytes_copied_addr = ret_addr;
|
||||||
|
let returned_status_addr = ret_addr + 4; // Address of returned boolean status variable
|
||||||
|
|
||||||
|
const dst = loadSlice(dest_addr, dest_len);
|
||||||
|
const src = loadValue(source_addr);
|
||||||
|
if (!(src instanceof Uint8Array)) {
|
||||||
|
mem().setUint8(returned_status_addr, 0); // Return "not ok" status
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const toCopy = src.subarray(0, dst.length);
|
||||||
|
dst.set(toCopy);
|
||||||
|
setInt64(num_bytes_copied_addr, toCopy.length);
|
||||||
|
mem().setUint8(returned_status_addr, 1); // Return "ok" status
|
||||||
|
},
|
||||||
|
|
||||||
|
// copyBytesToJS(dst ref, src []byte) (int, bool)
|
||||||
|
// Originally copied from upstream Go project, then modified:
|
||||||
|
// https://github.com/golang/go/blob/3f995c3f3b43033013013e6c7ccc93a9b1411ca9/misc/wasm/wasm_exec.js#L404-L416
|
||||||
|
"syscall/js.copyBytesToJS": (ret_addr, dest_addr, source_addr, source_len, source_cap) => {
|
||||||
|
let num_bytes_copied_addr = ret_addr;
|
||||||
|
let returned_status_addr = ret_addr + 4; // Address of returned boolean status variable
|
||||||
|
|
||||||
|
const dst = loadValue(dest_addr);
|
||||||
|
const src = loadSlice(source_addr, source_len);
|
||||||
|
if (!(dst instanceof Uint8Array)) {
|
||||||
|
mem().setUint8(returned_status_addr, 0); // Return "not ok" status
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const toCopy = src.subarray(0, dst.length);
|
||||||
|
dst.set(toCopy);
|
||||||
|
setInt64(num_bytes_copied_addr, toCopy.length);
|
||||||
|
mem().setUint8(returned_status_addr, 1); // Return "ok" status
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async run(instance) {
|
||||||
|
this._inst = instance;
|
||||||
|
this._values = [ // JS values that Go currently has references to, indexed by reference id
|
||||||
|
NaN,
|
||||||
|
0,
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
global,
|
||||||
|
this,
|
||||||
|
];
|
||||||
|
this._goRefCounts = []; // number of references that Go has to a JS value, indexed by reference id
|
||||||
|
this._ids = new Map(); // mapping from JS values to reference ids
|
||||||
|
this._idPool = []; // unused ids that have been garbage collected
|
||||||
|
this.exited = false; // whether the Go program has exited
|
||||||
|
|
||||||
|
const mem = new DataView(this._inst.exports.memory.buffer)
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
const callbackPromise = new Promise((resolve) => {
|
||||||
|
this._resolveCallbackPromise = () => {
|
||||||
|
if (this.exited) {
|
||||||
|
throw new Error("bad callback: Go program has already exited");
|
||||||
|
}
|
||||||
|
setTimeout(resolve, 0); // make sure it is asynchronous
|
||||||
|
};
|
||||||
|
});
|
||||||
|
this._inst.exports._start();
|
||||||
|
if (this.exited) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
await callbackPromise;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_resume() {
|
||||||
|
if (this.exited) {
|
||||||
|
throw new Error("Go program has already exited");
|
||||||
|
}
|
||||||
|
this._inst.exports.resume();
|
||||||
|
if (this.exited) {
|
||||||
|
this._resolveExitPromise();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_makeFuncWrapper(id) {
|
||||||
|
const go = this;
|
||||||
|
return function () {
|
||||||
|
const event = {id: id, this: this, args: arguments};
|
||||||
|
go._pendingEvent = event;
|
||||||
|
go._resume();
|
||||||
|
// @ts-ignore
|
||||||
|
return event.result;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private _resolveExitPromise() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,6 +30,6 @@ export class CacheableExecutorFactory<Api> implements ExecutorFactory<Api> {
|
|||||||
// switching off caching for now
|
// switching off caching for now
|
||||||
// - https://github.com/redstone-finance/redstone-smartcontracts/issues/53
|
// - https://github.com/redstone-finance/redstone-smartcontracts/issues/53
|
||||||
// probably should be cached on a lower level - i.e. either handler function (for js contracts)
|
// probably should be cached on a lower level - i.e. either handler function (for js contracts)
|
||||||
// or wasm instance.
|
// or wasm module.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,9 +88,15 @@ export class ArweaveWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async txData(id: string): Promise<Buffer> {
|
async txData(id: string): Promise<Buffer> {
|
||||||
|
// https://github.com/textury/arlocal/issues/83
|
||||||
|
const txData = (await this.arweave.transactions.getData(id, {
|
||||||
|
decode: true
|
||||||
|
})) as Uint8Array;
|
||||||
|
return isomorphicBuffer.from(txData);
|
||||||
|
|
||||||
// note: this is using arweave.net cache -
|
// note: this is using arweave.net cache -
|
||||||
// not very safe and clever, but fast...
|
// not very safe and clever, but fast...
|
||||||
const response = await fetch(`${this.baseUrl}/${id}`);
|
/*const response = await fetch(`${this.baseUrl}/${id}`);
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
this.logger.warn(`Unable to load data from arweave.net/${id} endpoint, falling back to arweave.js`);
|
this.logger.warn(`Unable to load data from arweave.net/${id} endpoint, falling back to arweave.js`);
|
||||||
// fallback to arweave-js as a last resort..
|
// fallback to arweave-js as a last resort..
|
||||||
@@ -101,7 +107,7 @@ export class ArweaveWrapper {
|
|||||||
} else {
|
} else {
|
||||||
const buffer = await response.arrayBuffer();
|
const buffer = await response.arrayBuffer();
|
||||||
return isomorphicBuffer.from(buffer);
|
return isomorphicBuffer.from(buffer);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
async txDataString(id: string): Promise<string> {
|
async txDataString(id: string): Promise<string> {
|
||||||
|
|||||||
644
yarn.lock
644
yarn.lock
@@ -370,345 +370,345 @@
|
|||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
strip-json-comments "^3.1.1"
|
strip-json-comments "^3.1.1"
|
||||||
|
|
||||||
"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.5.0":
|
"@ethersproject/abi@5.6.0", "@ethersproject/abi@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.0.tgz#ea07cbc1eec2374d32485679c12408005895e9f3"
|
||||||
integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==
|
integrity sha512-AhVByTwdXCc2YQ20v300w6KVHle9g2OFc28ZAFCPnJyEpkv1xKXjZcSTgWOlv1i+0dqlgF8RCF2Rn2KC1t+1Vg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/address" "^5.5.0"
|
"@ethersproject/address" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/constants" "^5.5.0"
|
"@ethersproject/constants" "^5.6.0"
|
||||||
"@ethersproject/hash" "^5.5.0"
|
"@ethersproject/hash" "^5.6.0"
|
||||||
"@ethersproject/keccak256" "^5.5.0"
|
"@ethersproject/keccak256" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0":
|
"@ethersproject/abstract-provider@5.6.0", "@ethersproject/abstract-provider@^5.6.0":
|
||||||
version "5.5.1"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061"
|
||||||
integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==
|
integrity sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/networks" "^5.5.0"
|
"@ethersproject/networks" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/transactions" "^5.5.0"
|
"@ethersproject/transactions" "^5.6.0"
|
||||||
"@ethersproject/web" "^5.5.0"
|
"@ethersproject/web" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.5.0":
|
"@ethersproject/abstract-signer@5.6.0", "@ethersproject/abstract-signer@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7"
|
||||||
integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==
|
integrity sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abstract-provider" "^5.5.0"
|
"@ethersproject/abstract-provider" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/address@5.5.0", "@ethersproject/address@^5.5.0":
|
"@ethersproject/address@5.6.0", "@ethersproject/address@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f"
|
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012"
|
||||||
integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==
|
integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/keccak256" "^5.5.0"
|
"@ethersproject/keccak256" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/rlp" "^5.5.0"
|
"@ethersproject/rlp" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0":
|
"@ethersproject/base64@5.6.0", "@ethersproject/base64@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090"
|
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9"
|
||||||
integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==
|
integrity sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0":
|
"@ethersproject/basex@5.6.0", "@ethersproject/basex@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3"
|
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69"
|
||||||
integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==
|
integrity sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.5.0":
|
"@ethersproject/bignumber@5.6.0", "@ethersproject/bignumber@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527"
|
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.0.tgz#116c81b075c57fa765a8f3822648cf718a8a0e26"
|
||||||
integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==
|
integrity sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
bn.js "^4.11.9"
|
bn.js "^4.11.9"
|
||||||
|
|
||||||
"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.5.0":
|
"@ethersproject/bytes@5.6.0", "@ethersproject/bytes@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c"
|
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.0.tgz#81652f2a0e04533575befadce555213c11d8aa20"
|
||||||
integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==
|
integrity sha512-3hJPlYemb9V4VLfJF5BfN0+55vltPZSHU3QKUyP9M3Y2TcajbiRrz65UG+xVHOzBereB1b9mn7r12o177xgN7w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.5.0":
|
"@ethersproject/constants@5.6.0", "@ethersproject/constants@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e"
|
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088"
|
||||||
integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==
|
integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/contracts@5.5.0":
|
"@ethersproject/contracts@5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197"
|
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.0.tgz#60f2cfc7addd99a865c6c8cfbbcec76297386067"
|
||||||
integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==
|
integrity sha512-74Ge7iqTDom0NX+mux8KbRUeJgu1eHZ3iv6utv++sLJG80FVuU9HnHeKVPfjd9s3woFhaFoQGf3B3iH/FrQmgw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abi" "^5.5.0"
|
"@ethersproject/abi" "^5.6.0"
|
||||||
"@ethersproject/abstract-provider" "^5.5.0"
|
"@ethersproject/abstract-provider" "^5.6.0"
|
||||||
"@ethersproject/abstract-signer" "^5.5.0"
|
"@ethersproject/abstract-signer" "^5.6.0"
|
||||||
"@ethersproject/address" "^5.5.0"
|
"@ethersproject/address" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/constants" "^5.5.0"
|
"@ethersproject/constants" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/transactions" "^5.5.0"
|
"@ethersproject/transactions" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.5.0":
|
"@ethersproject/hash@5.6.0", "@ethersproject/hash@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9"
|
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.0.tgz#d24446a5263e02492f9808baa99b6e2b4c3429a2"
|
||||||
integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==
|
integrity sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abstract-signer" "^5.5.0"
|
"@ethersproject/abstract-signer" "^5.6.0"
|
||||||
"@ethersproject/address" "^5.5.0"
|
"@ethersproject/address" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/keccak256" "^5.5.0"
|
"@ethersproject/keccak256" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0":
|
"@ethersproject/hdnode@5.6.0", "@ethersproject/hdnode@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6"
|
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.0.tgz#9dcbe8d629bbbcf144f2cae476337fe92d320998"
|
||||||
integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==
|
integrity sha512-61g3Jp3nwDqJcL/p4nugSyLrpl/+ChXIOtCEM8UDmWeB3JCAt5FoLdOMXQc3WWkc0oM2C0aAn6GFqqMcS/mHTw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abstract-signer" "^5.5.0"
|
"@ethersproject/abstract-signer" "^5.6.0"
|
||||||
"@ethersproject/basex" "^5.5.0"
|
"@ethersproject/basex" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/pbkdf2" "^5.5.0"
|
"@ethersproject/pbkdf2" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/sha2" "^5.5.0"
|
"@ethersproject/sha2" "^5.6.0"
|
||||||
"@ethersproject/signing-key" "^5.5.0"
|
"@ethersproject/signing-key" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
"@ethersproject/transactions" "^5.5.0"
|
"@ethersproject/transactions" "^5.6.0"
|
||||||
"@ethersproject/wordlists" "^5.5.0"
|
"@ethersproject/wordlists" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0":
|
"@ethersproject/json-wallets@5.6.0", "@ethersproject/json-wallets@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325"
|
resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz#4c2fc27f17e36c583e7a252fb938bc46f98891e5"
|
||||||
integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==
|
integrity sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abstract-signer" "^5.5.0"
|
"@ethersproject/abstract-signer" "^5.6.0"
|
||||||
"@ethersproject/address" "^5.5.0"
|
"@ethersproject/address" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/hdnode" "^5.5.0"
|
"@ethersproject/hdnode" "^5.6.0"
|
||||||
"@ethersproject/keccak256" "^5.5.0"
|
"@ethersproject/keccak256" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/pbkdf2" "^5.5.0"
|
"@ethersproject/pbkdf2" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/random" "^5.5.0"
|
"@ethersproject/random" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
"@ethersproject/transactions" "^5.5.0"
|
"@ethersproject/transactions" "^5.6.0"
|
||||||
aes-js "3.0.0"
|
aes-js "3.0.0"
|
||||||
scrypt-js "3.0.1"
|
scrypt-js "3.0.1"
|
||||||
|
|
||||||
"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.5.0":
|
"@ethersproject/keccak256@5.6.0", "@ethersproject/keccak256@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492"
|
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459"
|
||||||
integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==
|
integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
js-sha3 "0.8.0"
|
js-sha3 "0.8.0"
|
||||||
|
|
||||||
"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.5.0":
|
"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d"
|
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a"
|
||||||
integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==
|
integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==
|
||||||
|
|
||||||
"@ethersproject/networks@5.5.2", "@ethersproject/networks@^5.5.0":
|
"@ethersproject/networks@5.6.0", "@ethersproject/networks@^5.6.0":
|
||||||
version "5.5.2"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.2.tgz#784c8b1283cd2a931114ab428dae1bd00c07630b"
|
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.0.tgz#486d03fff29b4b6b5414d47a232ded09fe10de5e"
|
||||||
integrity sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==
|
integrity sha512-DaVzgyThzHgSDLuURhvkp4oviGoGe9iTZW4jMEORHDRCgSZ9K9THGFKqL+qGXqPAYLEgZTf5z2w56mRrPR1MjQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0":
|
"@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050"
|
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a"
|
||||||
integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==
|
integrity sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/sha2" "^5.5.0"
|
"@ethersproject/sha2" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.5.0":
|
"@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995"
|
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04"
|
||||||
integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==
|
integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/providers@5.5.3":
|
"@ethersproject/providers@5.6.0":
|
||||||
version "5.5.3"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.3.tgz#56c2b070542ac44eb5de2ed3cf6784acd60a3130"
|
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.0.tgz#08ec8e2666771e3a347e66c8f664a2af97366534"
|
||||||
integrity sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA==
|
integrity sha512-6+5PKXTWAttJWFWF8+xCDTCa2/dtq9BNrdKQHGl0IyIOwj99vM6OeThmIRcsIAzIOb8m0XS6w+1KFZwrf3j9nw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abstract-provider" "^5.5.0"
|
"@ethersproject/abstract-provider" "^5.6.0"
|
||||||
"@ethersproject/abstract-signer" "^5.5.0"
|
"@ethersproject/abstract-signer" "^5.6.0"
|
||||||
"@ethersproject/address" "^5.5.0"
|
"@ethersproject/address" "^5.6.0"
|
||||||
"@ethersproject/basex" "^5.5.0"
|
"@ethersproject/basex" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/constants" "^5.5.0"
|
"@ethersproject/constants" "^5.6.0"
|
||||||
"@ethersproject/hash" "^5.5.0"
|
"@ethersproject/hash" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/networks" "^5.5.0"
|
"@ethersproject/networks" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/random" "^5.5.0"
|
"@ethersproject/random" "^5.6.0"
|
||||||
"@ethersproject/rlp" "^5.5.0"
|
"@ethersproject/rlp" "^5.6.0"
|
||||||
"@ethersproject/sha2" "^5.5.0"
|
"@ethersproject/sha2" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
"@ethersproject/transactions" "^5.5.0"
|
"@ethersproject/transactions" "^5.6.0"
|
||||||
"@ethersproject/web" "^5.5.0"
|
"@ethersproject/web" "^5.6.0"
|
||||||
bech32 "1.1.4"
|
bech32 "1.1.4"
|
||||||
ws "7.4.6"
|
ws "7.4.6"
|
||||||
|
|
||||||
"@ethersproject/random@5.5.1", "@ethersproject/random@^5.5.0":
|
"@ethersproject/random@5.6.0", "@ethersproject/random@^5.6.0":
|
||||||
version "5.5.1"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.1.tgz#7cdf38ea93dc0b1ed1d8e480ccdaf3535c555415"
|
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.0.tgz#1505d1ab6a250e0ee92f436850fa3314b2cb5ae6"
|
||||||
integrity sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==
|
integrity sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0":
|
"@ethersproject/rlp@5.6.0", "@ethersproject/rlp@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0"
|
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717"
|
||||||
integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==
|
integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0":
|
"@ethersproject/sha2@5.6.0", "@ethersproject/sha2@^5.5.0", "@ethersproject/sha2@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7"
|
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9"
|
||||||
integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==
|
integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
hash.js "1.1.7"
|
hash.js "1.1.7"
|
||||||
|
|
||||||
"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0":
|
"@ethersproject/signing-key@5.6.0", "@ethersproject/signing-key@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0"
|
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.0.tgz#4f02e3fb09e22b71e2e1d6dc4bcb5dafa69ce042"
|
||||||
integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==
|
integrity sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
bn.js "^4.11.9"
|
bn.js "^4.11.9"
|
||||||
elliptic "6.5.4"
|
elliptic "6.5.4"
|
||||||
hash.js "1.1.7"
|
hash.js "1.1.7"
|
||||||
|
|
||||||
"@ethersproject/solidity@5.5.0":
|
"@ethersproject/solidity@5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f"
|
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3"
|
||||||
integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==
|
integrity sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/keccak256" "^5.5.0"
|
"@ethersproject/keccak256" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/sha2" "^5.5.0"
|
"@ethersproject/sha2" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.5.0":
|
"@ethersproject/strings@5.6.0", "@ethersproject/strings@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549"
|
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd"
|
||||||
integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==
|
integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/constants" "^5.5.0"
|
"@ethersproject/constants" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.5.0":
|
"@ethersproject/transactions@5.6.0", "@ethersproject/transactions@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908"
|
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e"
|
||||||
integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==
|
integrity sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/address" "^5.5.0"
|
"@ethersproject/address" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/constants" "^5.5.0"
|
"@ethersproject/constants" "^5.6.0"
|
||||||
"@ethersproject/keccak256" "^5.5.0"
|
"@ethersproject/keccak256" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/rlp" "^5.5.0"
|
"@ethersproject/rlp" "^5.6.0"
|
||||||
"@ethersproject/signing-key" "^5.5.0"
|
"@ethersproject/signing-key" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/units@5.5.0":
|
"@ethersproject/units@5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e"
|
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.0.tgz#e5cbb1906988f5740254a21b9ded6bd51e826d9c"
|
||||||
integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==
|
integrity sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/constants" "^5.5.0"
|
"@ethersproject/constants" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/wallet@5.5.0":
|
"@ethersproject/wallet@5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75"
|
resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.0.tgz#33d11a806d783864208f348709a5a3badac8e22a"
|
||||||
integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==
|
integrity sha512-qMlSdOSTyp0MBeE+r7SUhr1jjDlC1zAXB8VD84hCnpijPQiSNbxr6GdiLXxpUs8UKzkDiNYYC5DRI3MZr+n+tg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abstract-provider" "^5.5.0"
|
"@ethersproject/abstract-provider" "^5.6.0"
|
||||||
"@ethersproject/abstract-signer" "^5.5.0"
|
"@ethersproject/abstract-signer" "^5.6.0"
|
||||||
"@ethersproject/address" "^5.5.0"
|
"@ethersproject/address" "^5.6.0"
|
||||||
"@ethersproject/bignumber" "^5.5.0"
|
"@ethersproject/bignumber" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/hash" "^5.5.0"
|
"@ethersproject/hash" "^5.6.0"
|
||||||
"@ethersproject/hdnode" "^5.5.0"
|
"@ethersproject/hdnode" "^5.6.0"
|
||||||
"@ethersproject/json-wallets" "^5.5.0"
|
"@ethersproject/json-wallets" "^5.6.0"
|
||||||
"@ethersproject/keccak256" "^5.5.0"
|
"@ethersproject/keccak256" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/random" "^5.5.0"
|
"@ethersproject/random" "^5.6.0"
|
||||||
"@ethersproject/signing-key" "^5.5.0"
|
"@ethersproject/signing-key" "^5.6.0"
|
||||||
"@ethersproject/transactions" "^5.5.0"
|
"@ethersproject/transactions" "^5.6.0"
|
||||||
"@ethersproject/wordlists" "^5.5.0"
|
"@ethersproject/wordlists" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/web@5.5.1", "@ethersproject/web@^5.5.0":
|
"@ethersproject/web@5.6.0", "@ethersproject/web@^5.6.0":
|
||||||
version "5.5.1"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316"
|
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.0.tgz#4bf8b3cbc17055027e1a5dd3c357e37474eaaeb8"
|
||||||
integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==
|
integrity sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/base64" "^5.5.0"
|
"@ethersproject/base64" "^5.6.0"
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
|
|
||||||
"@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0":
|
"@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.6.0":
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f"
|
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032"
|
||||||
integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==
|
integrity sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.5.0"
|
"@ethersproject/bytes" "^5.6.0"
|
||||||
"@ethersproject/hash" "^5.5.0"
|
"@ethersproject/hash" "^5.6.0"
|
||||||
"@ethersproject/logger" "^5.5.0"
|
"@ethersproject/logger" "^5.6.0"
|
||||||
"@ethersproject/properties" "^5.5.0"
|
"@ethersproject/properties" "^5.6.0"
|
||||||
"@ethersproject/strings" "^5.5.0"
|
"@ethersproject/strings" "^5.6.0"
|
||||||
|
|
||||||
"@graphql-tools/merge@^8.2.3":
|
"@graphql-tools/merge@^8.2.3":
|
||||||
version "8.2.3"
|
version "8.2.3"
|
||||||
@@ -1744,10 +1744,10 @@ apollo-server-caching@^3.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lru-cache "^6.0.0"
|
lru-cache "^6.0.0"
|
||||||
|
|
||||||
apollo-server-core@^3.6.3:
|
apollo-server-core@^3.6.4:
|
||||||
version "3.6.3"
|
version "3.6.4"
|
||||||
resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.6.3.tgz#6b12ffa1af8bc8799930f72360090834915033d1"
|
resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.6.4.tgz#dcf3925173a8e9a501ed3975654cb2ed58af3710"
|
||||||
integrity sha512-TFJmAlI6vPp1MHOSXqYkE6leAyMekWv/D/3ma11uETkcd3EPjERGmxtTXPJElMVEkOK9BEElYKthCrH7bjYLuw==
|
integrity sha512-zttpu/3IeDGhRgIGK84z9HwTgvETDl9zntXiQ0G1tBJgOhDvehSkMiOmy+FKR1HW9+94ao1Olz6ZIyhP0dvzSg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@apollographql/apollo-tools" "^0.5.1"
|
"@apollographql/apollo-tools" "^0.5.1"
|
||||||
"@apollographql/graphql-playground-html" "1.6.29"
|
"@apollographql/graphql-playground-html" "1.6.29"
|
||||||
@@ -1783,9 +1783,9 @@ apollo-server-errors@^3.3.1:
|
|||||||
integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==
|
integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==
|
||||||
|
|
||||||
apollo-server-koa@^3.6.2:
|
apollo-server-koa@^3.6.2:
|
||||||
version "3.6.3"
|
version "3.6.4"
|
||||||
resolved "https://registry.yarnpkg.com/apollo-server-koa/-/apollo-server-koa-3.6.3.tgz#4027cdfd82175548e42a5ef01c055c733b1487c1"
|
resolved "https://registry.yarnpkg.com/apollo-server-koa/-/apollo-server-koa-3.6.4.tgz#affda3eae5e90e20ecf801f62c85a4c36d30cf99"
|
||||||
integrity sha512-KDKRjS3i6dQhtXGatRa0ftJQDa+o7Zt5+T0P1HSxGz4FA+w8GJ5Nn0V6PXh6QKNtLPzYu13DGQl6i8dSo6BMQQ==
|
integrity sha512-zG6VpD37WnyX8ycoBjFCoY8d1yKp/MPahyX73rVu8RWKDz6eCLUE/YopOPc2RC/DtxGc039Sv9yo4md5jAKNJw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@koa/cors" "^3.1.0"
|
"@koa/cors" "^3.1.0"
|
||||||
"@types/accepts" "^1.3.5"
|
"@types/accepts" "^1.3.5"
|
||||||
@@ -1794,7 +1794,7 @@ apollo-server-koa@^3.6.2:
|
|||||||
"@types/koa-compose" "^3.2.5"
|
"@types/koa-compose" "^3.2.5"
|
||||||
"@types/koa__cors" "^3.0.1"
|
"@types/koa__cors" "^3.0.1"
|
||||||
accepts "^1.3.7"
|
accepts "^1.3.7"
|
||||||
apollo-server-core "^3.6.3"
|
apollo-server-core "^3.6.4"
|
||||||
apollo-server-types "^3.5.1"
|
apollo-server-types "^3.5.1"
|
||||||
koa-bodyparser "^4.3.0"
|
koa-bodyparser "^4.3.0"
|
||||||
koa-compose "^4.1.0"
|
koa-compose "^4.1.0"
|
||||||
@@ -1882,10 +1882,10 @@ argparse@^1.0.7:
|
|||||||
dependencies:
|
dependencies:
|
||||||
sprintf-js "~1.0.2"
|
sprintf-js "~1.0.2"
|
||||||
|
|
||||||
arlocal@1.1.22:
|
arlocal@1.1.26:
|
||||||
version "1.1.22"
|
version "1.1.26"
|
||||||
resolved "https://registry.yarnpkg.com/arlocal/-/arlocal-1.1.22.tgz#75ee7c4f8c7e54f8756f9df35439b764b5486404"
|
resolved "https://registry.yarnpkg.com/arlocal/-/arlocal-1.1.26.tgz#8193fc7792507c2038dc720e69b8d9bf64ec3c33"
|
||||||
integrity sha512-7p+Ic35ZagEOJRSnxpeJ6Gv6xsUVeBpn50ku1xA6m0eMM3ke+eBdoEVpaSsdaR8sAo840Vn/94Q5AHblw6Jt8Q==
|
integrity sha512-5rY7z777o5D1sJ+OtanZOPsuJwgeONKLy7PWr4fAWS72q0RAP4JaoTsFk99nhZZcDd4BZJQhtpnbpUih1fs4Aw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@koa/cors" "^3.1.0"
|
"@koa/cors" "^3.1.0"
|
||||||
apollo-server-koa "^3.6.2"
|
apollo-server-koa "^3.6.2"
|
||||||
@@ -1902,6 +1902,7 @@ arlocal@1.1.22:
|
|||||||
koa-logger "^3.2.1"
|
koa-logger "^3.2.1"
|
||||||
koa-router "^10.1.1"
|
koa-router "^10.1.1"
|
||||||
lodash "^4.17.21"
|
lodash "^4.17.21"
|
||||||
|
mime "^3.0.0"
|
||||||
minimist "^1.2.5"
|
minimist "^1.2.5"
|
||||||
moment "^2.29.1"
|
moment "^2.29.1"
|
||||||
rfc4648 "^1.5.1"
|
rfc4648 "^1.5.1"
|
||||||
@@ -3433,40 +3434,40 @@ etag@~1.8.1:
|
|||||||
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
||||||
|
|
||||||
ethers@^5.5.1:
|
ethers@^5.5.1:
|
||||||
version "5.5.4"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.4.tgz#e1155b73376a2f5da448e4a33351b57a885f4352"
|
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.0.tgz#924eb965dc03963fad0a09ce687efdf49aca3b45"
|
||||||
integrity sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw==
|
integrity sha512-00FP71jt6bW3ndO5DhgH9mLIZhoCGnAKFLu8qig5KmV03ubEChKf2ilB3g6fX512tTYo+tSMDJ5WpCJWdBHkBQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abi" "5.5.0"
|
"@ethersproject/abi" "5.6.0"
|
||||||
"@ethersproject/abstract-provider" "5.5.1"
|
"@ethersproject/abstract-provider" "5.6.0"
|
||||||
"@ethersproject/abstract-signer" "5.5.0"
|
"@ethersproject/abstract-signer" "5.6.0"
|
||||||
"@ethersproject/address" "5.5.0"
|
"@ethersproject/address" "5.6.0"
|
||||||
"@ethersproject/base64" "5.5.0"
|
"@ethersproject/base64" "5.6.0"
|
||||||
"@ethersproject/basex" "5.5.0"
|
"@ethersproject/basex" "5.6.0"
|
||||||
"@ethersproject/bignumber" "5.5.0"
|
"@ethersproject/bignumber" "5.6.0"
|
||||||
"@ethersproject/bytes" "5.5.0"
|
"@ethersproject/bytes" "5.6.0"
|
||||||
"@ethersproject/constants" "5.5.0"
|
"@ethersproject/constants" "5.6.0"
|
||||||
"@ethersproject/contracts" "5.5.0"
|
"@ethersproject/contracts" "5.6.0"
|
||||||
"@ethersproject/hash" "5.5.0"
|
"@ethersproject/hash" "5.6.0"
|
||||||
"@ethersproject/hdnode" "5.5.0"
|
"@ethersproject/hdnode" "5.6.0"
|
||||||
"@ethersproject/json-wallets" "5.5.0"
|
"@ethersproject/json-wallets" "5.6.0"
|
||||||
"@ethersproject/keccak256" "5.5.0"
|
"@ethersproject/keccak256" "5.6.0"
|
||||||
"@ethersproject/logger" "5.5.0"
|
"@ethersproject/logger" "5.6.0"
|
||||||
"@ethersproject/networks" "5.5.2"
|
"@ethersproject/networks" "5.6.0"
|
||||||
"@ethersproject/pbkdf2" "5.5.0"
|
"@ethersproject/pbkdf2" "5.6.0"
|
||||||
"@ethersproject/properties" "5.5.0"
|
"@ethersproject/properties" "5.6.0"
|
||||||
"@ethersproject/providers" "5.5.3"
|
"@ethersproject/providers" "5.6.0"
|
||||||
"@ethersproject/random" "5.5.1"
|
"@ethersproject/random" "5.6.0"
|
||||||
"@ethersproject/rlp" "5.5.0"
|
"@ethersproject/rlp" "5.6.0"
|
||||||
"@ethersproject/sha2" "5.5.0"
|
"@ethersproject/sha2" "5.6.0"
|
||||||
"@ethersproject/signing-key" "5.5.0"
|
"@ethersproject/signing-key" "5.6.0"
|
||||||
"@ethersproject/solidity" "5.5.0"
|
"@ethersproject/solidity" "5.6.0"
|
||||||
"@ethersproject/strings" "5.5.0"
|
"@ethersproject/strings" "5.6.0"
|
||||||
"@ethersproject/transactions" "5.5.0"
|
"@ethersproject/transactions" "5.6.0"
|
||||||
"@ethersproject/units" "5.5.0"
|
"@ethersproject/units" "5.6.0"
|
||||||
"@ethersproject/wallet" "5.5.0"
|
"@ethersproject/wallet" "5.6.0"
|
||||||
"@ethersproject/web" "5.5.1"
|
"@ethersproject/web" "5.6.0"
|
||||||
"@ethersproject/wordlists" "5.5.0"
|
"@ethersproject/wordlists" "5.6.0"
|
||||||
|
|
||||||
event-emitter@~0.3.4:
|
event-emitter@~0.3.4:
|
||||||
version "0.3.5"
|
version "0.3.5"
|
||||||
@@ -5400,6 +5401,11 @@ mime@^2.4.6:
|
|||||||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
|
resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
|
||||||
integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
|
integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
|
||||||
|
|
||||||
|
mime@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
|
||||||
|
integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
|
||||||
|
|
||||||
mimic-fn@^2.1.0:
|
mimic-fn@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||||
@@ -7081,9 +7087,9 @@ tsc-alias@1.3.10:
|
|||||||
normalize-path "^3.0.0"
|
normalize-path "^3.0.0"
|
||||||
|
|
||||||
tsc-watch@^4.6.0:
|
tsc-watch@^4.6.0:
|
||||||
version "4.6.0"
|
version "4.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.6.0.tgz#a0eba1300cbe3048ab6d3a3e06de47141b613beb"
|
resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.6.2.tgz#4267ee6acddb608356573ba96024fa250eb22cac"
|
||||||
integrity sha512-DRMADjFe44EDWb+YMIOj4b83UrU6le27L3/o0/9FlmA01ikFd5Dl9RD5h1hpeh0mQdIqXvwfHZszCcjhH3bAmQ==
|
integrity sha512-eHWzZGkPmzXVGQKbqQgf3BFpGiZZw1jQ29ZOJeaSe8JfyUvphbd221NfXmmsJUGGPGA/nnaSS01tXipUcyxAxg==
|
||||||
dependencies:
|
dependencies:
|
||||||
cross-spawn "^7.0.3"
|
cross-spawn "^7.0.3"
|
||||||
node-cleanup "^2.1.2"
|
node-cleanup "^2.1.2"
|
||||||
|
|||||||
Reference in New Issue
Block a user