Skip to content

Commit c79d763

Browse files
AzaharaCpetermetz
authored andcommitted
feat(connector-quorum): contractAbi optional parameter
Signed-off-by: AzaharaC <[email protected]>
1 parent 26cf7c2 commit c79d763

File tree

5 files changed

+63
-28
lines changed

5 files changed

+63
-28
lines changed

packages/cactus-plugin-ledger-connector-besu/src/test/typescript/integration/plugin-ledger-connector-besu/deploy-contract/deploy-contract-from-json.test.ts

-14
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import { K_CACTUS_BESU_TOTAL_TX_COUNT } from "../../../../../main/typescript/pro
3131

3232
const testCase = "deploys contract via .json file";
3333
const logLevel: LogLevelDesc = "TRACE";
34-
const contractName = "HelloWorld";
3534

3635
test("BEFORE " + testCase, async (t: Test) => {
3736
const pruning = pruneDockerAllIfGithubAction({ logLevel });
@@ -165,7 +164,6 @@ test(testCase, async (t: Test) => {
165164
);
166165

167166
const { callOutput: helloMsg } = await connector.invokeContract({
168-
contractName,
169167
contractAbi: HelloWorldContractJson.abi,
170168
contractAddress,
171169
invocationType: EthContractInvocationType.CALL,
@@ -220,7 +218,6 @@ test(testCase, async (t: Test) => {
220218
test("invoke Web3SigningCredentialType.PRIVATEKEYHEX", async (t2: Test) => {
221219
const newName = `DrCactus${uuidv4()}`;
222220
const setNameOut = await connector.invokeContract({
223-
contractName,
224221
contractAbi: HelloWorldContractJson.abi,
225222
contractAddress,
226223
invocationType: EthContractInvocationType.SEND,
@@ -237,7 +234,6 @@ test(testCase, async (t: Test) => {
237234

238235
try {
239236
const setNameOutInvalid = await connector.invokeContract({
240-
contractName,
241237
contractAbi: HelloWorldContractJson.abi,
242238
contractAddress,
243239
invocationType: EthContractInvocationType.SEND,
@@ -260,7 +256,6 @@ test(testCase, async (t: Test) => {
260256
);
261257
}
262258
const { callOutput: getNameOut } = await connector.invokeContract({
263-
contractName,
264259
contractAbi: HelloWorldContractJson.abi,
265260
contractAddress,
266261
invocationType: EthContractInvocationType.CALL,
@@ -276,7 +271,6 @@ test(testCase, async (t: Test) => {
276271
t2.equal(getNameOut, newName, `getName() output reflects the update OK`);
277272

278273
const getNameOut2 = await connector.invokeContract({
279-
contractName,
280274
contractAbi: HelloWorldContractJson.abi,
281275
contractAddress,
282276
invocationType: EthContractInvocationType.SEND,
@@ -292,7 +286,6 @@ test(testCase, async (t: Test) => {
292286
t2.ok(getNameOut2, "getName() invocation #2 output is truthy OK");
293287

294288
const response = await connector.invokeContract({
295-
contractName,
296289
contractAbi: HelloWorldContractJson.abi,
297290
contractAddress,
298291
invocationType: EthContractInvocationType.SEND,
@@ -309,7 +302,6 @@ test(testCase, async (t: Test) => {
309302
t2.ok(response, "deposit() payable invocation output is truthy OK");
310303

311304
const { callOutput } = await connector.invokeContract({
312-
contractName,
313305
contractAbi: HelloWorldContractJson.abi,
314306
contractAddress,
315307
invocationType: EthContractInvocationType.CALL,
@@ -342,7 +334,6 @@ test(testCase, async (t: Test) => {
342334
};
343335

344336
const setNameOut = await connector.invokeContract({
345-
contractName,
346337
contractAbi: HelloWorldContractJson.abi,
347338
contractAddress,
348339
invocationType: EthContractInvocationType.SEND,
@@ -356,7 +347,6 @@ test(testCase, async (t: Test) => {
356347

357348
try {
358349
const setNameOutInvalid = await connector.invokeContract({
359-
contractName,
360350
contractAbi: HelloWorldContractJson.abi,
361351
contractAddress,
362352
invocationType: EthContractInvocationType.SEND,
@@ -376,7 +366,6 @@ test(testCase, async (t: Test) => {
376366
}
377367

378368
const { callOutput: getNameOut } = await connector.invokeContract({
379-
contractName,
380369
contractAbi: HelloWorldContractJson.abi,
381370
contractAddress,
382371
invocationType: EthContractInvocationType.CALL,
@@ -388,7 +377,6 @@ test(testCase, async (t: Test) => {
388377
t2.equal(getNameOut, newName, `getName() output reflects the update OK`);
389378

390379
const getNameOut2 = await connector.invokeContract({
391-
contractName,
392380
contractAbi: HelloWorldContractJson.abi,
393381
contractAddress,
394382
invocationType: EthContractInvocationType.SEND,
@@ -400,7 +388,6 @@ test(testCase, async (t: Test) => {
400388
t2.ok(getNameOut2, "getName() invocation #2 output is truthy OK");
401389

402390
const response = await connector.invokeContract({
403-
contractName,
404391
contractAbi: HelloWorldContractJson.abi,
405392
contractAddress,
406393
invocationType: EthContractInvocationType.SEND,
@@ -413,7 +400,6 @@ test(testCase, async (t: Test) => {
413400
t2.ok(response, "deposit() payable invocation output is truthy OK");
414401

415402
const { callOutput } = await connector.invokeContract({
416-
contractName,
417403
contractAbi: HelloWorldContractJson.abi,
418404
contractAddress,
419405
invocationType: EthContractInvocationType.CALL,

packages/cactus-plugin-ledger-connector-quorum/src/main/json/openapi.json

+11
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,17 @@
502502
"default": [],
503503
"items": {}
504504
},
505+
"contractAbi": {
506+
"description": "The application binary interface of the solidity contract, optional parameter",
507+
"type": "array",
508+
"items": {},
509+
"nullable": false
510+
},
511+
"contractAddress": {
512+
"description": "Address of the solidity contract, optional parameter",
513+
"type": "string",
514+
"nullable": false
515+
},
505516
"value": {
506517
"oneOf": [
507518
{

packages/cactus-plugin-ledger-connector-quorum/src/main/typescript/generated/openapi/typescript-axios/api.ts

+12
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@ export interface InvokeContractV1Request {
127127
* @memberof InvokeContractV1Request
128128
*/
129129
params: Array<any>;
130+
/**
131+
* The application binary interface of the solidity contract, optional parameter
132+
* @type {Array<any>}
133+
* @memberof InvokeContractV1Request
134+
*/
135+
contractAbi?: Array<any>;
136+
/**
137+
* Address of the solidity contract, optional parameter
138+
* @type {string}
139+
* @memberof InvokeContractV1Request
140+
*/
141+
contractAddress?: string;
130142
/**
131143
*
132144
* @type {string | number}

packages/cactus-plugin-ledger-connector-quorum/src/main/typescript/plugin-ledger-connector-quorum.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ export class PluginLedgerConnectorQuorum
211211
): Promise<InvokeContractV1Response> {
212212
const fnTag = `${this.className}#invokeContract()`;
213213
const contractName = req.contractName;
214+
let contractInstance: Contract;
214215

215216
if (req.keychainId != undefined) {
216217
const networkId = await this.web3.eth.net.getId();
@@ -267,7 +268,19 @@ export class PluginLedgerConnectorQuorum
267268
);
268269
}
269270

270-
const contractInstance = this.contracts[contractName];
271+
contractInstance = this.contracts[contractName];
272+
if (req.contractAbi != undefined) {
273+
let abi;
274+
if (typeof req.contractAbi === "string") {
275+
abi = JSON.parse(req.contractAbi);
276+
} else {
277+
abi = req.contractAbi;
278+
}
279+
280+
const { contractAddress } = req;
281+
contractInstance = new this.web3.eth.Contract(abi, contractAddress);
282+
}
283+
271284
const methodRef = contractInstance.methods[req.methodName];
272285
Checks.truthy(methodRef, `${fnTag} YourContract.${req.methodName}`);
273286

packages/cactus-plugin-ledger-connector-quorum/src/test/typescript/integration/plugin-ledger-connector-quorum/deploy-contract/deploy-contract-from-json.test.ts

+26-13
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ test(testCase, async (t: Test) => {
166166

167167
const { callOutput: helloMsg } = await connector.invokeContract({
168168
contractName,
169-
keychainId: keychainPlugin.getKeychainId(),
169+
contractAbi: HelloWorldContractJson.abi,
170+
contractAddress,
170171
invocationType: EthContractInvocationType.CALL,
171172
methodName: "sayHello",
172173
params: [],
@@ -187,7 +188,8 @@ test(testCase, async (t: Test) => {
187188
const newName = `DrCactus${uuidV4()}`;
188189
const setNameOut = await connector.invokeContract({
189190
contractName,
190-
keychainId: keychainPlugin.getKeychainId(),
191+
contractAbi: HelloWorldContractJson.abi,
192+
contractAddress,
191193
invocationType: EthContractInvocationType.SEND,
192194
methodName: "setName",
193195
params: [newName],
@@ -203,7 +205,8 @@ test(testCase, async (t: Test) => {
203205
try {
204206
const setNameOutInvalid = await connector.invokeContract({
205207
contractName,
206-
keychainId: keychainPlugin.getKeychainId(),
208+
contractAbi: HelloWorldContractJson.abi,
209+
contractAddress,
207210
invocationType: EthContractInvocationType.SEND,
208211
methodName: "setName",
209212
params: [newName],
@@ -226,7 +229,8 @@ test(testCase, async (t: Test) => {
226229

227230
const getNameOut = await connector.invokeContract({
228231
contractName,
229-
keychainId: keychainPlugin.getKeychainId(),
232+
contractAbi: HelloWorldContractJson.abi,
233+
contractAddress,
230234
invocationType: EthContractInvocationType.SEND,
231235
methodName: "getName",
232236
params: [],
@@ -240,7 +244,8 @@ test(testCase, async (t: Test) => {
240244

241245
const { callOutput: getNameOut2 } = await connector.invokeContract({
242246
contractName,
243-
keychainId: keychainPlugin.getKeychainId(),
247+
contractAbi: HelloWorldContractJson.abi,
248+
contractAddress,
244249
invocationType: EthContractInvocationType.CALL,
245250
methodName: "getName",
246251
params: [],
@@ -291,7 +296,8 @@ test(testCase, async (t: Test) => {
291296
const newName = `DrCactus${uuidV4()}`;
292297
const setNameOut = await connector.invokeContract({
293298
contractName,
294-
keychainId: keychainPlugin.getKeychainId(),
299+
contractAbi: HelloWorldContractJson.abi,
300+
contractAddress,
295301
invocationType: EthContractInvocationType.SEND,
296302
methodName: "setName",
297303
params: [newName],
@@ -307,7 +313,8 @@ test(testCase, async (t: Test) => {
307313
try {
308314
const setNameOutInvalid = await connector.invokeContract({
309315
contractName,
310-
keychainId: keychainPlugin.getKeychainId(),
316+
contractAbi: HelloWorldContractJson.abi,
317+
contractAddress,
311318
invocationType: EthContractInvocationType.SEND,
312319
methodName: "setName",
313320
params: [newName],
@@ -329,7 +336,8 @@ test(testCase, async (t: Test) => {
329336
}
330337
const { callOutput: getNameOut } = await connector.invokeContract({
331338
contractName,
332-
keychainId: keychainPlugin.getKeychainId(),
339+
contractAbi: HelloWorldContractJson.abi,
340+
contractAddress,
333341
invocationType: EthContractInvocationType.CALL,
334342
methodName: "getName",
335343
params: [],
@@ -344,7 +352,8 @@ test(testCase, async (t: Test) => {
344352

345353
const getNameOut2 = await connector.invokeContract({
346354
contractName,
347-
keychainId: keychainPlugin.getKeychainId(),
355+
contractAbi: HelloWorldContractJson.abi,
356+
contractAddress,
348357
invocationType: EthContractInvocationType.SEND,
349358
methodName: "getName",
350359
params: [],
@@ -372,7 +381,8 @@ test(testCase, async (t: Test) => {
372381

373382
const setNameOut = await connector.invokeContract({
374383
contractName,
375-
keychainId: keychainPlugin.getKeychainId(),
384+
contractAbi: HelloWorldContractJson.abi,
385+
contractAddress,
376386
invocationType: EthContractInvocationType.SEND,
377387
methodName: "setName",
378388
params: [newName],
@@ -385,7 +395,8 @@ test(testCase, async (t: Test) => {
385395
try {
386396
const setNameOutInvalid = await connector.invokeContract({
387397
contractName,
388-
keychainId: keychainPlugin.getKeychainId(),
398+
contractAbi: HelloWorldContractJson.abi,
399+
contractAddress,
389400
invocationType: EthContractInvocationType.SEND,
390401
methodName: "setName",
391402
params: [newName],
@@ -407,7 +418,8 @@ test(testCase, async (t: Test) => {
407418
}
408419
const { callOutput: getNameOut } = await connector.invokeContract({
409420
contractName,
410-
keychainId: keychainPlugin.getKeychainId(),
421+
contractAbi: HelloWorldContractJson.abi,
422+
contractAddress,
411423
invocationType: EthContractInvocationType.CALL,
412424
methodName: "getName",
413425
params: [],
@@ -418,7 +430,8 @@ test(testCase, async (t: Test) => {
418430

419431
const getNameOut2 = await connector.invokeContract({
420432
contractName,
421-
keychainId: keychainPlugin.getKeychainId(),
433+
contractAbi: HelloWorldContractJson.abi,
434+
contractAddress,
422435
invocationType: EthContractInvocationType.SEND,
423436
methodName: "getName",
424437
params: [],

0 commit comments

Comments
 (0)