From 4345e9c82d29070d8ae222ced7374358ddcc5f65 Mon Sep 17 00:00:00 2001 From: Jan Hoffmann Date: Tue, 1 Jun 2021 23:42:03 +0200 Subject: [PATCH 1/4] Basic support for StoredContractByHash --- src/background/SignMessageManager.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/background/SignMessageManager.ts b/src/background/SignMessageManager.ts index 7328e611..b34bba83 100644 --- a/src/background/SignMessageManager.ts +++ b/src/background/SignMessageManager.ts @@ -265,11 +265,15 @@ export default class SignMessageManager extends events.EventEmitter { ? 'Contract Call' : 'Contract Deployment'; + console.log('TYPE', type); + const amount = deploy.deploy.session.transfer ?.getArgByName('amount')! .asBigNumber() .toString(); + console.log('!amount', amount); + const transferId = deploy.deploy.session.transfer ?.getArgByName('id')! .asOption() @@ -277,9 +281,13 @@ export default class SignMessageManager extends events.EventEmitter { .asBigNumber() .toString(); - let target = encodeBase16( - deploy.deploy.session.transfer?.getArgByName('target')!.asBytesArray()! - ); + console.log('!id', transferId); + + const targetBytes = deploy.deploy.session.transfer + ?.getArgByName('target')! + .asBytesArray()!; + + let target = targetBytes ? encodeBase16(targetBytes) : ''; return { deployHash: encodeBase16(deploy.deploy.hash), From f326cadb81904c13803b677ef8ab658ad385b901 Mon Sep 17 00:00:00 2001 From: Jan Hoffmann Date: Wed, 2 Jun 2021 19:04:45 +0200 Subject: [PATCH 2/4] support for different deploy types --- src/background/SignMessageManager.ts | 57 +++++++++++++++++------- src/popup/components/SignMessagePage.tsx | 18 +++++++- 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/src/background/SignMessageManager.ts b/src/background/SignMessageManager.ts index b34bba83..e1b686a8 100644 --- a/src/background/SignMessageManager.ts +++ b/src/background/SignMessageManager.ts @@ -2,6 +2,7 @@ import * as events from 'events'; import { AppState } from '../lib/MemStore'; import PopupManager from '../background/PopupManager'; import { DeployUtil, encodeBase16 } from 'casper-client-sdk'; +import { toJS } from 'mobx'; export type deployStatus = 'unsigned' | 'signed' | 'failed'; export interface deployWithID { @@ -25,6 +26,8 @@ export interface DeployData { id?: any; amount?: any; target?: string; + validator?: string; + delegator?: string; } /** @@ -259,20 +262,46 @@ export default class SignMessageManager extends events.EventEmitter { let header = deploy.deploy.header; // TODO: Double-check that this is correct way to determine deploy type. - let type = deploy.deploy.isTransfer() + const type = deploy.deploy.isTransfer() ? 'Transfer' : deploy.deploy.session.isModuleBytes() ? 'Contract Call' : 'Contract Deployment'; - console.log('TYPE', type); + let amount; + let target; + let validator; + let delegator; - const amount = deploy.deploy.session.transfer - ?.getArgByName('amount')! - .asBigNumber() - .toString(); + if (deploy.deploy.session.transfer) { + amount = deploy.deploy.session.transfer + ?.getArgByName('amount')! + .asBigNumber() + .toString(); + + target = encodeBase16( + deploy.deploy.session.transfer + ?.getArgByName('target')! + .asBytesArray()! + ); + } + + if (deploy.deploy.session.storedContractByHash) { + amount = deploy.deploy.session.storedContractByHash + ?.getArgByName('amount')! + .asBigNumber() + .toString(); - console.log('!amount', amount); + validator = deploy.deploy.session.storedContractByHash + ?.getArgByName('validator')! + .asPublicKey() + .toAccountHex(); + + delegator = deploy.deploy.session.storedContractByHash + ?.getArgByName('delegator')! + .asPublicKey() + .toAccountHex(); + } const transferId = deploy.deploy.session.transfer ?.getArgByName('id')! @@ -281,14 +310,6 @@ export default class SignMessageManager extends events.EventEmitter { .asBigNumber() .toString(); - console.log('!id', transferId); - - const targetBytes = deploy.deploy.session.transfer - ?.getArgByName('target')! - .asBytesArray()!; - - let target = targetBytes ? encodeBase16(targetBytes) : ''; - return { deployHash: encodeBase16(deploy.deploy.hash), signingKey: deploy.signingKey, @@ -299,8 +320,10 @@ export default class SignMessageManager extends events.EventEmitter { payment: encodeBase16(deploy.deploy.payment.toBytes()), deployType: type, id: type === 'Transfer' ? transferId : undefined, - amount: type === 'Transfer' ? amount : undefined, - target: type === 'Transfer' ? target : undefined + amount: amount, + target: type === 'Transfer' ? target : undefined, + validator, + delegator }; } else { throw new Error('Deploy undefined!'); diff --git a/src/popup/components/SignMessagePage.tsx b/src/popup/components/SignMessagePage.tsx index 9609fa7f..ac46a403 100644 --- a/src/popup/components/SignMessagePage.tsx +++ b/src/popup/components/SignMessagePage.tsx @@ -78,17 +78,31 @@ class SignMessagePage extends React.Component< this.createRow('Timestamp', deployData.timestamp), this.createRow('Chain Name', deployData.chainName), this.createRow('Gas Price', deployData.gasPrice), - this.createRow('Deploy Type', deployData.deployType) + this.createRow('Deploy Type', deployData.deployType), + this.createRow('Amount', deployData.amount) ]; if (deployData.deployType === 'Transfer') { this.setState({ rows: [ ...baseRows, this.createRow('To', this.truncateString(deployData.target!, 6, 6)), - this.createRow('Amount', deployData.amount), this.createRow('Transfer ID', deployData.id) ] }); + } else if (deployData.deployType === 'Contract Deployment') { + this.setState({ + rows: [ + ...baseRows, + this.createRow( + 'Validator', + this.truncateString(deployData.validator!, 6, 6) + ), + this.createRow( + 'Delegator', + this.truncateString(deployData.delegator!, 6, 6) + ) + ] + }); } else { this.setState({ rows: baseRows }); } From 4c159d0a607d90ab7a398ae7a540b07acf30bc73 Mon Sep 17 00:00:00 2001 From: Jan Hoffmann Date: Wed, 2 Jun 2021 20:42:57 +0200 Subject: [PATCH 3/4] amount displayed as motes with thousands separator --- src/popup/components/SignMessagePage.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/popup/components/SignMessagePage.tsx b/src/popup/components/SignMessagePage.tsx index ac46a403..3396017a 100644 --- a/src/popup/components/SignMessagePage.tsx +++ b/src/popup/components/SignMessagePage.tsx @@ -18,6 +18,10 @@ import Grid from '@material-ui/core/Grid'; import Box from '@material-ui/core/Box'; import { deployWithID } from '../../background/SignMessageManager'; +// TODO: Move it to helper functions +const numberWithSpaces = (num: number) => + num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' '); + interface Props extends RouteComponentProps { signMessageContainer: SignMessageContainer; authContainer: AccountManager; @@ -79,7 +83,7 @@ class SignMessagePage extends React.Component< this.createRow('Chain Name', deployData.chainName), this.createRow('Gas Price', deployData.gasPrice), this.createRow('Deploy Type', deployData.deployType), - this.createRow('Amount', deployData.amount) + this.createRow('Amount', `${numberWithSpaces(deployData.amount)} motes`) ]; if (deployData.deployType === 'Transfer') { this.setState({ From 00e3961b80d0376a02037f5e3e5000fe37b800dc Mon Sep 17 00:00:00 2001 From: Jan Hoffmann Date: Thu, 3 Jun 2021 10:17:57 +0200 Subject: [PATCH 4/4] version bump --- package.json | 2 +- public/manifest.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 88048cc7..9d9d0c71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casperlabs-signer", - "version": "1.1.0", + "version": "1.1.1", "private": true, "dependencies": { "@babel/core": "^7.14.3", diff --git a/public/manifest.json b/public/manifest.json index 26828b86..632f3425 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { "manifest_version": 2, - "version": "1.1.0", + "version": "1.1.1", "name": "CasperLabs Signer", "author": "https://casperlabs.io", "description": "CasperLabs Signer tool for signing transactions on the blockchain.",