From 7add85f54475dbc21d6152ad5157205fa6fbfec2 Mon Sep 17 00:00:00 2001 From: Lucio Rubens Date: Thu, 19 Oct 2023 12:13:39 -0400 Subject: [PATCH 1/4] feat: add `/vm.m_run` message handler --- .../src/common/utils/client-utils.ts | 2 ++ .../common/validation/validation-message.ts | 33 +++++++++++++++++++ .../src/inject/executor/executor.ts | 6 ++++ .../src/inject/message/methods/transaction.ts | 7 +++- .../wallet/transaction-detail/use-status.ts | 10 +++++- .../src/services/transaction/message/vm/vm.ts | 16 +++++++++ .../message-info/message-info-vm.ts | 19 +++++++++++ .../src/transaction/transaction-builder.ts | 5 +++ .../src/transaction/transaction.ts | 2 +- 9 files changed, 97 insertions(+), 3 deletions(-) diff --git a/packages/adena-extension/src/common/utils/client-utils.ts b/packages/adena-extension/src/common/utils/client-utils.ts index 5ecf66fb..7d03f758 100644 --- a/packages/adena-extension/src/common/utils/client-utils.ts +++ b/packages/adena-extension/src/common/utils/client-utils.ts @@ -82,6 +82,8 @@ export function parseTxsEachDate(txs: object[]) { txDesc = `pkg: ${cur.pkg_path}`; } else if (cur.type === '/vm.m_addpkg') { txFunc = 'AddPkg'; + } else if (cur.type === '/vm.m_run') { + txDesc = `Run`; } else { txDesc = ''; } diff --git a/packages/adena-extension/src/common/validation/validation-message.ts b/packages/adena-extension/src/common/validation/validation-message.ts index 6492f07e..450ff161 100644 --- a/packages/adena-extension/src/common/validation/validation-message.ts +++ b/packages/adena-extension/src/common/validation/validation-message.ts @@ -99,3 +99,36 @@ export const validateTrasactionMessageOfAddPkg = (message: { [key in string]: an } return true; }; + +export const validateTrasactionMessageOfRun = (message: { [key in string]: any }) => { + if (!message.type || !message.value) { + return false; + } + if (message.type !== '/vm.m_run') { + return false; + } + if (typeof message.value !== 'object') { + return false; + } + if (typeof message.value.caller !== 'string') { + return false; + } + if (typeof message.value.send !== 'string') { + return false; + } + if (typeof message.value.package !== 'object') { + return false; + } + + const packageValue = message.value.package; + if (typeof packageValue?.Name !== 'string') { + return false; + } + if (typeof packageValue?.Path !== 'string') { + return false; + } + if (!Array.isArray(packageValue?.Files)) { + return false; + } + return true; +}; diff --git a/packages/adena-extension/src/inject/executor/executor.ts b/packages/adena-extension/src/inject/executor/executor.ts index 2319e2bb..30e6df8b 100644 --- a/packages/adena-extension/src/inject/executor/executor.ts +++ b/packages/adena-extension/src/inject/executor/executor.ts @@ -4,6 +4,7 @@ import { validateDoContractRequest, validateTrasactionMessageOfAddPkg, validateTrasactionMessageOfBankSend, + validateTrasactionMessageOfRun, validateTrasactionMessageOfVmCall, } from '@common/validation/validation-message'; @@ -116,6 +117,11 @@ export class AdenaExecutor { return InjectionMessageInstance.failure('INVALID_FORMAT'); } break; + case '/vm.m_run': + if (!validateTrasactionMessageOfRun(message)) { + return InjectionMessageInstance.failure('INVALID_FORMAT'); + } + break; default: return InjectionMessageInstance.failure('UNSUPPORTED_TYPE'); } diff --git a/packages/adena-extension/src/inject/message/methods/transaction.ts b/packages/adena-extension/src/inject/message/methods/transaction.ts index 744c0134..b91e0c1c 100644 --- a/packages/adena-extension/src/inject/message/methods/transaction.ts +++ b/packages/adena-extension/src/inject/message/methods/transaction.ts @@ -77,7 +77,7 @@ export const validateInjectionAddress = (currentAccountAddress: string) => { }; export const validateInjectionTransactionType = (requestData: InjectionMessage) => { - const messageTypes = ['/bank.MsgSend', '/vm.m_call', '/vm.m_addpkg']; + const messageTypes = ['/bank.MsgSend', '/vm.m_call', '/vm.m_addpkg', '/vm.m_run']; return requestData.data?.messages.every((message: any) => messageTypes.includes(message?.type)); }; @@ -103,6 +103,11 @@ export const validateInjectionTransactionMessage = ( return false; } break; + case '/vm.m_run': + if (currentAccountAddress !== message.value.caller) { + return false; + } + break; default: break; } diff --git a/packages/adena-extension/src/pages/wallet/transaction-detail/use-status.ts b/packages/adena-extension/src/pages/wallet/transaction-detail/use-status.ts index 9a4318da..de51204b 100644 --- a/packages/adena-extension/src/pages/wallet/transaction-detail/use-status.ts +++ b/packages/adena-extension/src/pages/wallet/transaction-detail/use-status.ts @@ -29,7 +29,7 @@ export interface TxProps { txType: string; } -type TxTypeValue = '/bank.MsgSend' | '/vm.m_call' | '/vm.m_addpkg'; +type TxTypeValue = '/bank.MsgSend' | '/vm.m_call' | '/vm.m_addpkg' | '/vm.m_run'; export interface ResultTxStateType { txStatusStyle: { [key in string]: any }; @@ -48,6 +48,7 @@ const statusSymbol = { '/bank.MsgSend': gnot, '/vm.m_call': contract, '/vm.m_addpkg': addpkg, + '/vm.m_run': gnot, }; const useStatus = () => { @@ -91,6 +92,13 @@ const useStatus = () => { txSend: 'AddPkg', }; } + if ((state.txType as TxTypeValue) === '/vm.m_run') { + result = { + ...result, + txTypeDesc: 'Run', + txSend: 'Run', + }; + } return result; }; diff --git a/packages/adena-extension/src/services/transaction/message/vm/vm.ts b/packages/adena-extension/src/services/transaction/message/vm/vm.ts index c81ee9cf..0aecd5ca 100644 --- a/packages/adena-extension/src/services/transaction/message/vm/vm.ts +++ b/packages/adena-extension/src/services/transaction/message/vm/vm.ts @@ -37,3 +37,19 @@ export const createMessageOfVmCall = (info: { }, }; }; + +export const createMessageOfVmRun = (info: { + caller: string; + send: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + packageInfo: any; +}) => { + return { + type: '/vm.m_run', + value: { + caller: info.caller, + send: info.send, + package: info.packageInfo + }, + }; +}; diff --git a/packages/adena-module/src/transaction/message-info/message-info-vm.ts b/packages/adena-module/src/transaction/message-info/message-info-vm.ts index 50a270f4..80aeca40 100644 --- a/packages/adena-module/src/transaction/message-info/message-info-vm.ts +++ b/packages/adena-module/src/transaction/message-info/message-info-vm.ts @@ -26,6 +26,12 @@ export interface VmAddPackage extends InfoType { deposit: string; } +export interface VmRun extends InfoType { + caller: string; + send: string; + package?: Package; +} + export const encodeVmCall = (writer: protobuf.Writer, messageInfo: VmCall) => { if (messageInfo.caller !== '') { writer.uint32(10).string(messageInfo.caller); @@ -80,3 +86,16 @@ export const encodeVmAddPackage = (writer: protobuf.Writer, messageInfo: VmAddPa } return writer; }; + +export const encodeVmRun = (writer: protobuf.Writer, messageInfo: VmAddPackage) => { + if (messageInfo.caller !== '') { + writer.uint32(10).string(messageInfo.caller); + } + if (messageInfo.send !== '') { + writer.uint32(18).string(messageInfo.send); + } + if (messageInfo.package !== undefined) { + encodePackage(writer.uint32(18).fork(), messageInfo.package).ldelim(); + } + return writer; +}; diff --git a/packages/adena-module/src/transaction/transaction-builder.ts b/packages/adena-module/src/transaction/transaction-builder.ts index b9c2f7d3..4d2d7d98 100644 --- a/packages/adena-module/src/transaction/transaction-builder.ts +++ b/packages/adena-module/src/transaction/transaction-builder.ts @@ -5,6 +5,7 @@ import { encodeBankSend, encodeVmAddPackage, encodeVmCall, + encodeVmRun, VmAddPackage, VmCall, } from './message-info'; @@ -112,6 +113,10 @@ export class TransactionBuilder { messageInfo = message.value as VmAddPackage; encodeVmAddPackage(writer, messageInfo); break; + case '/vm.m_run': + messageInfo = message.value as VmAddPackage; + encodeVmRun(writer, messageInfo); + break; default: throw new Error('Not Found Transaction Message Type'); } diff --git a/packages/adena-module/src/transaction/transaction.ts b/packages/adena-module/src/transaction/transaction.ts index b7dfae4b..a19d2a4c 100644 --- a/packages/adena-module/src/transaction/transaction.ts +++ b/packages/adena-module/src/transaction/transaction.ts @@ -4,7 +4,7 @@ import protobuf from 'protobufjs/minimal'; import { StdSignDoc } from '..'; import { TransactionEncode } from './transaction-encode'; -export type MessageTypeUrl = '/vm.m_call' | '/vm.m_addpkg' | '/bank.MsgSend'; +export type MessageTypeUrl = '/vm.m_call' | '/vm.m_addpkg' | '/vm.m_run' | '/bank.MsgSend'; export interface TransactionMessage { type: MessageTypeUrl; From 4b77dfbdf2440f3448515a6ab56fde10c464ee3f Mon Sep 17 00:00:00 2001 From: Lucio Rubens Date: Thu, 19 Oct 2023 12:33:32 -0400 Subject: [PATCH 2/4] fix: type --- .../src/transaction/message-info/message-info-vm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adena-module/src/transaction/message-info/message-info-vm.ts b/packages/adena-module/src/transaction/message-info/message-info-vm.ts index 80aeca40..a459fe9a 100644 --- a/packages/adena-module/src/transaction/message-info/message-info-vm.ts +++ b/packages/adena-module/src/transaction/message-info/message-info-vm.ts @@ -87,7 +87,7 @@ export const encodeVmAddPackage = (writer: protobuf.Writer, messageInfo: VmAddPa return writer; }; -export const encodeVmRun = (writer: protobuf.Writer, messageInfo: VmAddPackage) => { +export const encodeVmRun = (writer: protobuf.Writer, messageInfo: VmRun) => { if (messageInfo.caller !== '') { writer.uint32(10).string(messageInfo.caller); } From 3f09a5208bf5c10b3ddb7e077b4fe9348c94b176 Mon Sep 17 00:00:00 2001 From: Lucio Rubens Date: Thu, 19 Oct 2023 12:35:59 -0400 Subject: [PATCH 3/4] fix: transaction-builder --- packages/adena-module/src/transaction/transaction-builder.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/adena-module/src/transaction/transaction-builder.ts b/packages/adena-module/src/transaction/transaction-builder.ts index 4d2d7d98..52428bc2 100644 --- a/packages/adena-module/src/transaction/transaction-builder.ts +++ b/packages/adena-module/src/transaction/transaction-builder.ts @@ -8,6 +8,7 @@ import { encodeVmRun, VmAddPackage, VmCall, + VmRun, } from './message-info'; import { MessageTypeUrl, @@ -114,7 +115,7 @@ export class TransactionBuilder { encodeVmAddPackage(writer, messageInfo); break; case '/vm.m_run': - messageInfo = message.value as VmAddPackage; + messageInfo = message.value as VmRun; encodeVmRun(writer, messageInfo); break; default: From b8e93d5c55f3516b20cf5e0297cad4be287c7996 Mon Sep 17 00:00:00 2001 From: Lucio Rubens Date: Fri, 20 Oct 2023 10:36:53 -0400 Subject: [PATCH 4/4] fix: position --- .../src/transaction/message-info/message-info-vm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adena-module/src/transaction/message-info/message-info-vm.ts b/packages/adena-module/src/transaction/message-info/message-info-vm.ts index a459fe9a..cca98ebe 100644 --- a/packages/adena-module/src/transaction/message-info/message-info-vm.ts +++ b/packages/adena-module/src/transaction/message-info/message-info-vm.ts @@ -95,7 +95,7 @@ export const encodeVmRun = (writer: protobuf.Writer, messageInfo: VmRun) => { writer.uint32(18).string(messageInfo.send); } if (messageInfo.package !== undefined) { - encodePackage(writer.uint32(18).fork(), messageInfo.package).ldelim(); + encodePackage(writer.uint32(26).fork(), messageInfo.package).ldelim(); } return writer; };