Skip to content

Commit e04c2b0

Browse files
authored
chore(): 4.0.5 (#2173)
<!-- Thanks for sending a pull request! --> #### What this PR does / why we need it: #### Which issue(s) does this PR fixes?: <!-- (Optional) Automatically closes linked issue when PR is merged. Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`. --> Fixes # #### Additional comments?:
1 parent 0063bb7 commit e04c2b0

File tree

9 files changed

+177
-14
lines changed

9 files changed

+177
-14
lines changed

apps/whale-api/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: "3.7"
22

33
services:
44
defi-blockchain:
5-
image: defi/defichain:4.0.0
5+
image: defi/defichain:4.0.5
66

77
ports:
88
- "19554:19554"

docs/node/CATEGORIES/08-account.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,12 @@ Create a transfer domain transaction submitted to a connected node.
159159

160160
```ts title="client.account.transferDomain()"
161161
interface account {
162-
transferDomain (payload: Array<Record<string, TransferDomainInfo>>): Promise<string>
162+
transferDomain (payload: Array<Record<TransferDomainKey, TransferDomainInfo> | Record<TransferDomainOptionalKey, TransferDomainOptionalInfo>>): Promise<string>
163+
}
164+
165+
enum TransferDomainKey {
166+
SRC = 'src',
167+
DST = 'dst'
163168
}
164169

165170
interface TransferDomainInfo {
@@ -176,7 +181,15 @@ enum TransferDomainType {
176181
DVM = 2,
177182
/** type for EVM To DVM Token transfer */
178183
EVM = 3,
179-
};
184+
}
185+
186+
enum TransferDomainOptionalKey {
187+
SINGLE_KEY_CHECK = 'singlekeycheck',
188+
}
189+
190+
interface TransferDomainOptionalInfo {
191+
singleKeyCheck: boolean
192+
}
180193
```
181194

182195
## accountToUtxos

packages/jellyfish-api-core/__tests__/category/account/getTokenBalances.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
22
import { ContainerAdapterClient } from '../../container_adapter_client'
3-
import { TransferDomainType } from '../../../src/category/account'
3+
import { TransferDomainType, TransferDomainOptionalInfo } from '../../../src/category/account'
44
import waitForExpect from 'wait-for-expect'
55
import BigNumber from 'bignumber.js'
66

@@ -137,7 +137,8 @@ describe('Account', () => {
137137
address: evmAddr,
138138
amount: '3@DFI',
139139
domain: TransferDomainType.EVM
140-
}
140+
},
141+
singlekeycheck: false as unknown as TransferDomainOptionalInfo
141142
}
142143
])
143144
await container.generate(1)
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
2+
import { ContainerAdapterClient } from '../../container_adapter_client'
3+
import { TransferDomainOptionalInfo, TransferDomainType } from '../../../src/category/account'
4+
import { RpcApiError } from '@defichain/jellyfish-api-core'
5+
import BigNumber from 'bignumber.js'
6+
7+
describe('TransferDomain', () => {
8+
let legacyAddr: string
9+
let legacyEvmAddr: string
10+
let bech32Addr: string
11+
let bech32EvmAddr: string
12+
const container = new MasterNodeRegTestContainer()
13+
const client = new ContainerAdapterClient(container)
14+
15+
beforeAll(async () => {
16+
await container.start()
17+
await container.waitForWalletCoinbaseMaturity()
18+
19+
await client.masternode.setGov({
20+
ATTRIBUTES: {
21+
'v0/params/feature/evm': 'true',
22+
'v0/params/feature/transferdomain': 'true'
23+
}
24+
})
25+
await container.generate(2)
26+
27+
legacyAddr = await container.getNewAddress('legacy', 'legacy')
28+
legacyEvmAddr = (await container.call('addressmap', [legacyAddr, 1])).format.erc55
29+
30+
bech32Addr = await container.getNewAddress('bech32', 'bech32')
31+
bech32EvmAddr = (await container.call('addressmap', [bech32Addr, 1])).format.erc55
32+
33+
await container.call('utxostoaccount', [{ [legacyAddr]: '100000@0' }])
34+
await container.generate(1)
35+
})
36+
37+
afterAll(async () => {
38+
await container.stop()
39+
})
40+
41+
describe('single key check restricted', () => {
42+
it('should fail as src key and dst key is different', async () => {
43+
const promise = client.account.transferDomain([
44+
{
45+
src: {
46+
address: legacyAddr,
47+
amount: '3@DFI',
48+
domain: TransferDomainType.DVM
49+
},
50+
dst: {
51+
address: bech32EvmAddr,
52+
amount: '3@DFI',
53+
domain: TransferDomainType.EVM
54+
}
55+
}
56+
])
57+
await expect(promise).rejects.toThrow(RpcApiError)
58+
await expect(promise).rejects.toThrow('Dst address does not match source key')
59+
})
60+
61+
it('should transfer domain with same key', async () => {
62+
const legacyAccBefore = await client.account.getAccount(legacyAddr)
63+
const [value] = legacyAccBefore[0].split('@')
64+
const legacyBalanceBefore = new BigNumber(value)
65+
const evmBalanceBefore = await getEVMBalances(client)
66+
67+
await client.account.transferDomain([
68+
{
69+
src: {
70+
address: legacyAddr,
71+
amount: '1@DFI',
72+
domain: TransferDomainType.DVM
73+
},
74+
dst: {
75+
address: legacyEvmAddr,
76+
amount: '1@DFI',
77+
domain: TransferDomainType.EVM
78+
}
79+
}
80+
])
81+
await container.generate(1)
82+
83+
{
84+
const legacyAccAfter = await client.account.getAccount(legacyAddr)
85+
const [value] = legacyAccAfter[0].split('@')
86+
const legacyBalanceAfter = new BigNumber(value)
87+
expect(legacyBalanceAfter).toStrictEqual(legacyBalanceBefore.minus(1))
88+
89+
const evmBalanceAfter = await getEVMBalances(client)
90+
expect(evmBalanceAfter).toStrictEqual(evmBalanceBefore.plus(1))
91+
}
92+
})
93+
94+
it('should transfer domain with different key', async () => {
95+
const legacyAccBefore = await client.account.getAccount(legacyAddr)
96+
const [value] = legacyAccBefore[0].split('@')
97+
const legacyBalanceBefore = new BigNumber(value)
98+
const evmBalanceBefore = await getEVMBalances(client)
99+
100+
await client.account.transferDomain([
101+
{
102+
src: {
103+
address: legacyAddr,
104+
amount: '2@DFI',
105+
domain: TransferDomainType.DVM
106+
},
107+
dst: {
108+
address: bech32EvmAddr,
109+
amount: '2@DFI',
110+
domain: TransferDomainType.EVM
111+
},
112+
singlekeycheck: false as unknown as TransferDomainOptionalInfo
113+
}
114+
])
115+
await container.generate(1)
116+
117+
{
118+
const legacyAccAfter = await client.account.getAccount(legacyAddr)
119+
const [value] = legacyAccAfter[0].split('@')
120+
const legacyBalanceAfter = new BigNumber(value)
121+
expect(legacyBalanceAfter).toStrictEqual(legacyBalanceBefore.minus(2))
122+
123+
const evmBalanceAfter = await getEVMBalances(client)
124+
expect(evmBalanceAfter).toStrictEqual(evmBalanceBefore.plus(2))
125+
}
126+
})
127+
})
128+
})
129+
130+
async function getEVMBalances (client: ContainerAdapterClient): Promise<BigNumber> {
131+
const ethRes = await client.account.getTokenBalances({}, false)
132+
const [eth] = ethRes[0].split('@')
133+
const withEthRes = await client.account.getTokenBalances({}, false, { symbolLookup: false, includeEth: true })
134+
const [withEth] = withEthRes[0].split('@')
135+
return new BigNumber(withEth).minus(eth)
136+
}

packages/jellyfish-api-core/__tests__/category/account/transferDomain.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
1+
import { MasterNodeRegTestContainer, StartFlags } from '@defichain/testcontainers'
22
import { ContainerAdapterClient } from '../../container_adapter_client'
33
import { TransferDomainType } from '../../../src/category/account'
44
import { RpcApiError } from '@defichain/jellyfish-api-core'
@@ -8,9 +8,11 @@ describe('TransferDomain', () => {
88
let dvmAddr: string, evmAddr: string, p2shAddr: string
99
const container = new MasterNodeRegTestContainer()
1010
const client = new ContainerAdapterClient(container)
11+
// add `-tdsinglekeycheck` for backward compatibility
12+
const startFlags: StartFlags[] = [{ name: 'tdsinglekeycheck', value: 0 }]
1113

1214
beforeAll(async () => {
13-
await container.start()
15+
await container.start({ startFlags })
1416
await container.waitForWalletCoinbaseMaturity()
1517

1618
await client.masternode.setGov({

packages/jellyfish-api-core/__tests__/category/evm/evmTx.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
33
import { Testing } from '@defichain/jellyfish-testing'
44
import { RpcApiError } from '@defichain/jellyfish-api-core/dist/index'
55
import { ContainerAdapterClient } from '../../container_adapter_client'
6-
import { TransferDomainType } from '../../../src/category/account'
6+
import { TransferDomainType, TransferDomainOptionalInfo } from '../../../src/category/account'
77
import BigNumber from 'bignumber.js'
88

99
describe('EVMTX', () => {
@@ -69,7 +69,8 @@ describe('EVMTX', () => {
6969
address: ethAddress,
7070
amount: `${amount.HUNDRED}@DFI`,
7171
domain: TransferDomainType.EVM
72-
}
72+
},
73+
singlekeycheck: false as unknown as TransferDomainOptionalInfo
7374
}
7475
]
7576
await container.call('transferdomain', [dvmToEvmTransfer])

packages/jellyfish-api-core/src/category/account.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ export enum TransferDomainKey {
6666
DST = 'dst'
6767
}
6868

69+
export enum TransferDomainOptionalKey {
70+
SINGLE_KEY_CHECK = 'singlekeycheck',
71+
}
72+
6973
/**
7074
* Account RPCs for DeFi Blockchain
7175
*/
@@ -296,16 +300,18 @@ export class Account {
296300
/**
297301
* Create an transfer domain transaction submitted to a connected node.
298302
*
299-
* @param {Array<Record<TransferDomainKey, TransferDomainInfo>>} payload[]
300-
* @param {Record<TransferDomainKey, TransferDomainInfo>} payload
303+
* @param {Array<Record<TransferDomainKey, TransferDomainInfo> | Record<TransferDomainOptionalKey, TransferDomainOptionalInfo>>} payload[]
304+
* @param {Record<TransferDomainKey, TransferDomainInfo> | Record<TransferDomainOptionalKey, TransferDomainOptionalInfo>} payload
301305
* @param {TransferDomainInfo} info
302306
* @param {string} info.address
303307
* @param {string} info.amount
304308
* @param {TransferDomainType} info.domain
305309
* @param {string} [info.data] optional data, note: currently its not used
310+
* @param {TransferDomainOptionalInfo} optionalInfo
311+
* @param {boolean} [optionalInfo.singleKeyCheck=true]
306312
* @return {Promise<string>}
307313
*/
308-
async transferDomain (payload: Array<Record<TransferDomainKey, TransferDomainInfo>>): Promise<string> {
314+
async transferDomain (payload: Array<Record<TransferDomainKey, TransferDomainInfo> | Record<TransferDomainOptionalKey, TransferDomainOptionalInfo>>): Promise<string> {
309315
return await this.client.call('transferdomain', [payload], 'number')
310316
}
311317

@@ -725,3 +731,7 @@ export interface TransferDomainInfo {
725731
amount: string
726732
domain: TransferDomainType
727733
}
734+
735+
export interface TransferDomainOptionalInfo {
736+
singleKeyCheck: boolean
737+
}

packages/testcontainers/src/containers/DeFiDContainer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export abstract class DeFiDContainer extends DockerContainer {
3636
if (process?.env?.DEFICHAIN_DOCKER_IMAGE !== undefined) {
3737
return process.env.DEFICHAIN_DOCKER_IMAGE
3838
}
39-
return 'defi/defichain:4.0.0' // renovate.json regexManagers
39+
return 'defi/defichain:4.0.5' // renovate.json regexManagers
4040
}
4141

4242
public static readonly DefaultStartOptions = {

packages/testcontainers/src/containers/NativeChainContainer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export class NativeChainContainer extends GenericContainer {
2929
if (process?.env?.DEFICHAIN_DOCKER_IMAGE !== undefined) {
3030
return process.env.DEFICHAIN_DOCKER_IMAGE
3131
}
32-
return 'defi/defichain:4.0.0' // renovate.json regexManagers
32+
return 'defi/defichain:4.0.5' // renovate.json regexManagers
3333
}
3434

3535
public static readonly PREFIX = 'defichain-testcontainers-'

0 commit comments

Comments
 (0)