From 68f4692d38a0033d6583a3809c27c94bc391769a Mon Sep 17 00:00:00 2001 From: Seonpyo Kim Date: Mon, 20 May 2019 20:53:12 +0900 Subject: [PATCH 1/3] Change tracker function considering WrapCCC --- types/src/transaction/transaction.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/types/src/transaction/transaction.rs b/types/src/transaction/transaction.rs index 9b8b90e951..c3cc26e3ba 100644 --- a/types/src/transaction/transaction.rs +++ b/types/src/transaction/transaction.rs @@ -20,7 +20,7 @@ use primitives::H256; use rlp::RlpStream; use super::Action; -use super::ShardTransaction; +use super::{AssetWrapCCCOutput, ShardTransaction}; #[derive(Debug, Clone, PartialEq, Eq)] pub struct Transaction { @@ -52,8 +52,26 @@ impl Transaction { } pub fn tracker(&self) -> Option { - let t: Option = self.action.clone().into(); - t.map(|t| t.tracker()) + let shard_tx = match self.action.clone() { + Action::WrapCCC { + shard_id, + lock_script_hash, + parameters, + quantity, + .. + } => Some(ShardTransaction::WrapCCC { + network_id: self.network_id, + shard_id, + tx_hash: self.hash(), + output: AssetWrapCCCOutput { + lock_script_hash, + parameters, + quantity, + }, + }), + other_actions => other_actions.into(), + }; + shard_tx.map(|t| t.tracker()) } pub fn is_master_key_allowed(&self) -> bool { match self.action { From 76ab88929cbc2216ff984eb2b2b3d54c86003e51 Mon Sep 17 00:00:00 2001 From: Seonpyo Kim Date: Tue, 21 May 2019 12:08:46 +0900 Subject: [PATCH 2/3] Write WrapCCC tracker and address to body_db --- core/src/blockchain/body_db.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/blockchain/body_db.rs b/core/src/blockchain/body_db.rs index 37942f7bc4..01fc8aff88 100644 --- a/core/src/blockchain/body_db.rs +++ b/core/src/blockchain/body_db.rs @@ -18,7 +18,6 @@ use std::collections::{HashMap, HashSet}; use std::mem; use std::sync::Arc; -use ctypes::transaction::ShardTransaction; use kvdb::{DBTransaction, KeyValueDB}; use parking_lot::{Mutex, RwLock}; use primitives::{Bytes, H256}; @@ -347,9 +346,9 @@ fn transaction_address_entries( parcel_hashes: impl IntoIterator, ) -> impl Iterator { parcel_hashes.into_iter().enumerate().filter_map(move |(parcel_index, parcel)| { - Option::::from(parcel.action.clone()).map(|tx| { + parcel.tracker().map(|tracker| { ( - tx.tracker(), + tracker, TransactionAddresses::new(TransactionAddress { block_hash, index: parcel_index, From 40f5c4424cb3f9c0b7b63d832e0d938593576c17 Mon Sep 17 00:00:00 2001 From: Seonpyo Kim Date: Tue, 21 May 2019 14:42:37 +0900 Subject: [PATCH 3/3] Add a test case for getting WCCC tx by tracker The added test case succeeds on this branch but fails on current master branch because current master doesn't store WrapCCC tracker in body_db and invoice_db. --- test/src/e2e/wrap.test.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/src/e2e/wrap.test.ts b/test/src/e2e/wrap.test.ts index 45da40769d..a8530c582e 100644 --- a/test/src/e2e/wrap.test.ts +++ b/test/src/e2e/wrap.test.ts @@ -198,6 +198,36 @@ describe("WrapCCC", function() { ).to.be.rejected; }).timeout(30_000); + it("WCCC tracker should return the corresponding transaction", async function() { + const wrapCCC = node.sdk.core.createWrapCCCTransaction({ + shardId: 0, + recipient: await node.createP2PKHBurnAddress(), + quantity: 30, + payer: PlatformAddress.fromAccountId(faucetAccointId, { + networkId: "tc" + }) + }); + const seq = (await node.sdk.rpc.chain.getSeq(faucetAddress))!; + expect(seq).not.to.be.null; + const signedWrapCCC = wrapCCC.sign({ + secret: faucetSecret, + seq, + fee: 10 + }); + + const hash = await node.sdk.rpc.chain.sendSignedTransaction( + signedWrapCCC + ); + const tracker = wrapCCC.tracker(); + + expect(await node.sdk.rpc.chain.containsTransaction(hash)).be.true; + expect(await node.sdk.rpc.chain.getTransactionByTracker(tracker)).not + .null; + expect( + await node.sdk.rpc.chain.getTransactionResultsByTracker(tracker) + ).deep.equal([true]); + }); + afterEach(async function() { await node.clean(); });