From 55e79e11fc89848f30e92b4f618f7a3674b6eaa5 Mon Sep 17 00:00:00 2001 From: Asia Date: Tue, 22 Nov 2022 13:56:58 +0100 Subject: [PATCH] feat: deploy bundled (#267) --- src/contract/deploy/CreateContract.ts | 5 +++- .../deploy/impl/DefaultCreateContract.ts | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/contract/deploy/CreateContract.ts b/src/contract/deploy/CreateContract.ts index 02b873b..8b9da69 100644 --- a/src/contract/deploy/CreateContract.ts +++ b/src/contract/deploy/CreateContract.ts @@ -39,10 +39,13 @@ export interface FromSrcTxContractData extends CommonContractData { export interface ContractDeploy { contractTxId: string; - srcTxId: string; + srcTxId?: string; } + export interface CreateContract { deploy(contractData: ContractData, disableBundling?: boolean): Promise; deployFromSourceTx(contractData: FromSrcTxContractData, disableBundling?: boolean): Promise; + + deployBundled(rawDataItem: Buffer): Promise; } diff --git a/src/contract/deploy/impl/DefaultCreateContract.ts b/src/contract/deploy/impl/DefaultCreateContract.ts index ba884ca..35b3b71 100644 --- a/src/contract/deploy/impl/DefaultCreateContract.ts +++ b/src/contract/deploy/impl/DefaultCreateContract.ts @@ -7,6 +7,7 @@ import { WARP_GW_URL } from '../../../core/WarpFactory'; import { LoggerFactory } from '../../../logging/LoggerFactory'; import { CreateContract, ContractData, ContractDeploy, FromSrcTxContractData } from '../CreateContract'; import { SourceImpl } from './SourceImpl'; +import { Buffer } from 'redstone-isomorphic'; export class DefaultCreateContract implements CreateContract { private readonly logger = LoggerFactory.INST.create('DefaultCreateContract'); @@ -107,6 +108,31 @@ export class DefaultCreateContract implements CreateContract { } } + async deployBundled(rawDataItem: Buffer): Promise { + const response = await fetch(`${WARP_GW_URL}/gateway/contracts/deploy-bundled`, { + method: 'POST', + headers: { + 'Content-Type': 'application/octet-stream', + Accept: 'application/json' + }, + body: rawDataItem + }); + if (response.ok) { + return response.json(); + } else { + if (typeof response.json === 'function') { + response.json().then((responseError) => { + if (responseError.message) { + this.logger.error(responseError.message); + } + }); + } + throw new Error( + `Error while deploying data item. Warp Gateway responded with status ${response.status} ${response.statusText}` + ); + } + } + private async post(contractTx: Transaction, srcTx: Transaction = null): Promise { let body: any = { contractTx