feat: contract manifest - deployment

This commit is contained in:
ppe
2022-11-30 22:38:48 +01:00
committed by just_ppe
parent 4ab7790cda
commit 1008f0906f
6 changed files with 27 additions and 8 deletions

View File

@@ -1,6 +1,8 @@
import { JWKInterface } from 'arweave/node/lib/wallet';
import { SignatureType } from '../../contract/Signature';
import { Source } from './Source';
import {EvaluationOptions} from "../../core/modules/StateEvaluator";
import {WarpPluginType} from "../../core/WarpPlugin";
export type Tags = { name: string; value: string }[];
@@ -18,6 +20,11 @@ export const emptyTransfer: ArTransfer = {
winstonQty: '0'
};
export type EvaluationManifest = {
evaluationOptions: Partial<EvaluationOptions>;
plugins: WarpPluginType[]
}
export interface CommonContractData {
wallet: ArWallet | SignatureType;
initState: string;
@@ -27,6 +34,7 @@ export interface CommonContractData {
'Content-Type': string;
body: string | Uint8Array | ArrayBuffer;
};
evaluationManifest?: EvaluationManifest
}
export interface ContractData extends CommonContractData {

View File

@@ -22,7 +22,7 @@ export class DefaultCreateContract implements CreateContract {
}
async deploy(contractData: ContractData, disableBundling?: boolean): Promise<ContractDeploy> {
const { wallet, initState, tags, transfer, data } = contractData;
const { wallet, initState, tags, transfer, data, evaluationManifest } = contractData;
const effectiveUseBundler =
disableBundling == undefined ? this.warp.definitionLoader.type() == 'warp' : !disableBundling;
@@ -41,7 +41,8 @@ export class DefaultCreateContract implements CreateContract {
initState,
tags,
transfer,
data
data,
evaluationManifest
},
!effectiveUseBundler,
srcTx
@@ -54,7 +55,7 @@ export class DefaultCreateContract implements CreateContract {
srcTx: Transaction = null
): Promise<ContractDeploy> {
this.logger.debug('Creating new contract from src tx');
const { wallet, srcTxId, initState, tags, transfer, data } = contractData;
const { wallet, srcTxId, initState, tags, transfer, data, evaluationManifest } = contractData;
this.signature = new Signature(this.warp, wallet);
const signer = this.signature.signer;
@@ -94,6 +95,10 @@ export class DefaultCreateContract implements CreateContract {
contractTX.addTag(SmartWeaveTags.WARP_TESTNET, '1.0.0');
}
if (contractData.evaluationManifest) {
contractTX.addTag(SmartWeaveTags.MANIFEST, JSON.stringify(contractData.evaluationManifest));
}
await signer(contractTX);
let responseOk: boolean;

View File

@@ -2,7 +2,7 @@
* This type contains all data and meta-data of the given contact.
*/
import { ContractType } from '../contract/deploy/CreateContract';
import {ContractType, EvaluationManifest} from '../contract/deploy/CreateContract';
export class ContractMetadata {
dtor: number;
@@ -28,6 +28,7 @@ export type ContractDefinition<State> = {
owner: string;
contractType: ContractType;
metadata?: ContractMetadata;
manifest?: EvaluationManifest;
contractTx: any;
srcTx: any;
testnet: string | null;

View File

@@ -18,5 +18,6 @@ export enum SmartWeaveTags {
WASM_META = 'Wasm-Meta',
REQUEST_VRF = 'Request-Vrf',
SIGNATURE_TYPE = 'Signature-Type',
WARP_TESTNET = 'Warp-Testnet'
WARP_TESTNET = 'Warp-Testnet',
MANIFEST = 'Contract-Manifest'
}

View File

@@ -53,6 +53,12 @@ export class ContractDefinitionLoader implements DefinitionLoader {
throw new Error('Trying to use non-testnet contract in a testnet env.');
}
const minFee = this.tagsParser.getTag(contractTx, SmartWeaveTags.MIN_FEE);
let manifest = null;
const rawManifest = this.tagsParser.getTag(contractTx, SmartWeaveTags.MANIFEST);
if (rawManifest) {
manifest = JSON.parse(rawManifest);
}
this.logger.debug('Tags decoding', benchmark.elapsed());
benchmark.reset();
const s = await this.evalInitialState(contractTx);
@@ -75,6 +81,7 @@ export class ContractDefinitionLoader implements DefinitionLoader {
owner,
contractType,
metadata,
manifest,
contractTx: contractTx.toJSON(),
srcTx,
testnet

View File

@@ -11,9 +11,6 @@ import { ArweaveWrapper } from '../../../utils/ArweaveWrapper';
import { stripTrailingSlash } from '../../../utils/utils';
import { DefinitionLoader } from '../DefinitionLoader';
import { WasmSrc } from './wasm/WasmSrc';
import { CacheOptions } from '../../WarpFactory';
import { MemoryLevel } from 'memory-level';
import { Level } from 'level';
import { WarpEnvironment } from '../../Warp';
import { TagsParser } from './TagsParser';
import { SortKeyCache } from '../../../cache/SortKeyCache';