feat: contract manifest - deployment
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user