Skip to content
This repository was archived by the owner on Jul 23, 2024. It is now read-only.

Commit a2a5199

Browse files
authored
Merge pull request #647 from jimni1222/sendUpdateTx
Added handling for send account update tx with key field
2 parents 4762643 + f1f48a3 commit a2a5199

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

packages/caver-core-method/src/index.js

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const POLLINGTIMEOUT = AVERAGE_BLOCK_TIME * TIMEOUTBLOCK // ~average block time
3838

3939
const TransactionDecoder = require('../../caver-transaction/src/transactionDecoder/transactionDecoder')
4040
const { TX_TYPE_STRING } = require('../../caver-transaction/src/transactionHelper/transactionHelper')
41+
const { resolveRawKeyToAccountKey } = require('../../caver-klay/caver-klay-accounts/src/transactionType/account')
4142

4243
function Method(options) {
4344
// call, name should be existed to create a method.
@@ -427,6 +428,9 @@ const buildSendRequestFunc = (defer, sendSignedTx, sendTxCallback) => (payload,
427428
}
428429
} else if (key === 'codeFormat') {
429430
tx[key] = utils.hexToNumber(payload.params[0][key])
431+
} else if (key === 'key' && _.isObject(payload.params[0][key])) {
432+
// If key field is `AccountForUpdate`, resolve this to raw encoded account key string.
433+
tx.key = resolveRawKeyToAccountKey(payload.params[0])
430434
} else if (key === 'account') {
431435
tx.key = payload.params[0][key].getRLPEncodingAccountKey()
432436
} else if (key === 'chainId') {

packages/caver-klay/caver-klay-accounts/src/transactionType/account.js

+1
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,5 @@ module.exports = {
243243
rlpEncodeForFeeDelegatedAccountUpdate,
244244
rlpEncodeForFeeDelegatedAccountUpdateWithRatio,
245245
parseAccountKey,
246+
resolveRawKeyToAccountKey,
246247
}

packages/caver-transaction/src/transactionHelper/transactionHelper.js

+36-1
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,36 @@ const TX_TYPE_TAG = {
175175
'0x7802': TX_TYPE_STRING.TxTypeEthereumDynamicFee,
176176
}
177177

178+
const TX_TYPE_TAG_LEGACY_TX_TYPES = {
179+
ACCOUNT_UPDATE: TX_TYPE_TAG.TxTypeAccountUpdate,
180+
FEE_DELEGATED_ACCOUNT_UPDATE: TX_TYPE_TAG.TxTypeFeeDelegatedAccountUpdate,
181+
FEE_DELEGATED_ACCOUNT_UPDATE_WITH_RATIO: TX_TYPE_TAG.TxTypeFeeDelegatedAccountUpdateWithRatio,
182+
183+
VALUE_TRANFSER: TX_TYPE_TAG.TxTypeValueTransfer,
184+
FEE_DELEGATED_VALUE_TRANSFER: TX_TYPE_TAG.TxTypeFeeDelegatedValueTransfer,
185+
FEE_DELEGATED_VALUE_TRANSFER_WITH_RATIO: TX_TYPE_TAG.TxTypeFeeDelegatedValueTransferWithRatio,
186+
187+
VALUE_TRANSFER_MEMO: TX_TYPE_TAG.TxTypeValueTransferMemo,
188+
FEE_DELEGATED_VALUE_TRANSFER_MEMO: TX_TYPE_TAG.TxTypeFeeDelegatedValueTransferMemo,
189+
FEE_DELEGATED_VALUE_TRANSFER_MEMO_WITH_RATIO: TX_TYPE_TAG.TxTypeFeeDelegatedValueTransferMemoWithRatio,
190+
191+
SMART_CONTRACT_DEPLOY: TX_TYPE_TAG.TxTypeSmartContractDeploy,
192+
FEE_DELEGATED_SMART_CONTRACT_DEPLOY: TX_TYPE_TAG.TxTypeFeeDelegatedSmartContractDeploy,
193+
FEE_DELEGATED_SMART_CONTRACT_DEPLOY_WITH_RATIO: TX_TYPE_TAG.TxTypeFeeDelegatedSmartContractDeployWithRatio,
194+
195+
SMART_CONTRACT_EXECUTION: TX_TYPE_TAG.TxTypeSmartContractExecution,
196+
FEE_DELEGATED_SMART_CONTRACT_EXECUTION: TX_TYPE_TAG.TxTypeFeeDelegatedSmartContractExecution,
197+
FEE_DELEGATED_SMART_CONTRACT_EXECUTION_WITH_RATIO: TX_TYPE_TAG.TxTypeFeeDelegatedSmartContractExecutionWithRatio,
198+
199+
CANCEL: TX_TYPE_TAG.TxTypeCancel,
200+
FEE_DELEGATED_CANCEL: TX_TYPE_TAG.TxTypeFeeDelegatedCancel,
201+
FEE_DELEGATED_CANCEL_WITH_RATIO: TX_TYPE_TAG.TxTypeFeeDelegatedCancelWithRatio,
202+
203+
CHAIN_DATA_ANCHORING: TX_TYPE_TAG.TxTypeChainDataAnchoring,
204+
FEE_DELEGATED_CHAIN_DATA_ANCHORING: TX_TYPE_TAG.TxTypeFeeDelegatedChainDataAnchoring,
205+
FEE_DELEGATED_CHAIN_DATA_ANCHORING_WITH_RATIO: TX_TYPE_TAG.TxTypeFeeDelegatedChainDataAnchoringWithRatio,
206+
}
207+
178208
const CODE_FORMAT = {
179209
EVM: '0x0',
180210
}
@@ -186,7 +216,12 @@ const CODE_FORMAT = {
186216
* @return {number}
187217
*/
188218
const getTypeInt = type => {
189-
return utils.hexToNumber(TX_TYPE_TAG[type])
219+
let typeInt = TX_TYPE_TAG[type]
220+
// If type int cannot be found from TX_TYPE_TAG, means old type string.
221+
if (typeInt === undefined) {
222+
typeInt = TX_TYPE_TAG_LEGACY_TX_TYPES[type]
223+
}
224+
return utils.hexToNumber(typeInt)
190225
}
191226

192227
/**

test/personal.js

+22
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,28 @@ describe('Personal RPC test', () => {
136136
expect(receipt.type).to.equals('TxTypeLegacyTransaction')
137137
}).timeout(50000)
138138

139+
// sendTransaction with account update tx
140+
it('CAVERJS-UNIT-ETC-404: sendTransaction should format a transaction to send tx with account in Node.', async () => {
141+
try {
142+
// If account is already existed in node, return error.
143+
const address = await caver.klay.personal.importRawKey(senderPrvKey, password)
144+
expect(address.toLowerCase()).to.equals(senderAddress.toLowerCase())
145+
} catch (e) {}
146+
147+
const receipt = await caver.klay.personal.sendTransaction(
148+
{
149+
type: 'ACCOUNT_UPDATE',
150+
from: senderAddress,
151+
key: caver.klay.accounts.createAccountForUpdateWithLegacyKey(senderAddress),
152+
gas: 900000,
153+
},
154+
password
155+
)
156+
console.log(receipt)
157+
expect(receipt).not.to.be.null
158+
expect(receipt.type).to.equals('TxTypeAccountUpdate')
159+
}).timeout(50000)
160+
139161
// signTransaction
140162
it('CAVERJS-UNIT-ETC-088: signTransaction should send a signed transaction using an account in the node.', async () => {
141163
const testAccount = caver.klay.accounts.create()

0 commit comments

Comments
 (0)