Skip to content

Commit 2f8e26d

Browse files
committed
change code
1 parent 87d6682 commit 2f8e26d

File tree

10 files changed

+115
-137
lines changed

10 files changed

+115
-137
lines changed

package.json

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
"version": "1.0.0",
44
"description": "GetGems NFT contracts",
55
"main": "index.js",
6+
"scripts": {
7+
"test": "mocha './packages/contracts/nft-raffle/**/*.test.ts' --require ts-node/register"
8+
},
69
"author": "Narek Abovyan <xeroxaltox@gmail.com>",
710
"license": "MIT",
811
"devDependencies": {

packages/contracts/nft-raffle/main.test.ts

+46-58
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import {
1111
Address
1212
} from 'ton'
1313
import { SmartContract } from 'ton-contract-executor'
14-
import { encodeRaffleStorage, buffer256ToDec, RaffleStorage, NFTItem } from './raffle.storage'
15-
import { getRandSigner } from './raffle.signers'
14+
import { encodeRaffleStorage, buffer256ToDec, RaffleStorage } from './raffle.storage'
1615
import { Queries } from './raffle.queries'
1716
import { RaffleLocal } from './raffle.local'
17+
import { randomAddress } from '../../utils/randomAddress'
1818

1919
function queryId (): BN {
2020
return new BN(~~(Date.now() / 1000))
@@ -37,54 +37,42 @@ const TVM_EXIT_CODES = {
3737

3838
describe('nft raffle main test', () => {
3939

40-
const COMMISSION_FOR_NFT = 0.5
41-
const COMMISSION_FOR_MP = 0.5
40+
const NFT_TRANSFER_FEE = 0.5
41+
const MARKETPLACE_FEE = 0.5
4242

4343
const LEFT_NFTS_COUNT = 3
4444
const RIGHT_NFTS_COUNT = 3
4545

46-
const LEFT_USER = getRandSigner()
47-
const RIGHT_USER = getRandSigner()
48-
const SUPER_USER = getRandSigner()
46+
const LEFT_USER = randomAddress()
47+
const RIGHT_USER = randomAddress()
48+
const SUPER_USER = randomAddress()
4949

50-
const LEFT_COMMISSION = toNano((COMMISSION_FOR_NFT + COMMISSION_FOR_MP) * LEFT_NFTS_COUNT)
51-
const RIGHT_COMMISSION = toNano((COMMISSION_FOR_NFT + COMMISSION_FOR_MP) * RIGHT_NFTS_COUNT)
52-
const COINS_FOR_NFT = toNano(COMMISSION_FOR_NFT + COMMISSION_FOR_MP + 0.01)
50+
const LEFT_COMMISSION = toNano((NFT_TRANSFER_FEE + MARKETPLACE_FEE) * LEFT_NFTS_COUNT)
51+
const RIGHT_COMMISSION = toNano((NFT_TRANSFER_FEE + MARKETPLACE_FEE) * RIGHT_NFTS_COUNT)
52+
const COINS_FOR_NFT = toNano(NFT_TRANSFER_FEE + MARKETPLACE_FEE + 0.01)
5353

54-
const NFTS: NFTItem[] = []
54+
const NFTS: {address:Address, owner:'left' | 'right'}[] = []
5555
const EMPTY_BODY = new CommonMessageInfo(
5656
{ body: new CellMessage(new Builder().endCell()) }
5757
)
5858
for (let i = 0; i < LEFT_NFTS_COUNT; i += 1) {
59-
NFTS.push({ addr: getRandSigner(), received: 0 })
59+
NFTS.push({ address: randomAddress(), owner: 'left' })
6060
}
6161
for (let i = 0; i < RIGHT_NFTS_COUNT; i += 1) {
62-
NFTS.push({ addr: getRandSigner(), received: 1 })
62+
NFTS.push({ address: randomAddress(), owner: 'right' })
6363
}
6464
const data: RaffleStorage = {
65-
stateSlice:
66-
{
67-
state: STATES.Active,
68-
rightNftsCount: RIGHT_NFTS_COUNT,
69-
leftNftsCount: LEFT_NFTS_COUNT
70-
},
71-
addrSlice:
72-
{
73-
leftUser: LEFT_USER,
74-
rightUser: RIGHT_USER,
75-
superUser: SUPER_USER
76-
},
77-
commissionSlice:
78-
{
79-
leftCommission: LEFT_COMMISSION,
80-
rightCommission: RIGHT_COMMISSION,
81-
coinsForNft: toNano(COMMISSION_FOR_NFT),
82-
coinsForCommission: toNano(COMMISSION_FOR_MP)
83-
},
84-
dictSlice:
85-
{
86-
nfts: NFTS,
87-
}
65+
state: STATES.Active,
66+
rightNftsCount: RIGHT_NFTS_COUNT,
67+
leftNftsCount: LEFT_NFTS_COUNT,
68+
leftUser: LEFT_USER,
69+
rightUser: RIGHT_USER,
70+
superUser: SUPER_USER,
71+
leftCommission: LEFT_COMMISSION,
72+
rightCommission: RIGHT_COMMISSION,
73+
nftTransferFee: toNano(NFT_TRANSFER_FEE),
74+
marketplaceFee: toNano(MARKETPLACE_FEE),
75+
nfts: NFTS,
8876
}
8977
describe('contract', () => {
9078
async function simpleTransferNFT (raffleLocal: RaffleLocal, nftAddr: Address, nftOwner: Address, amount: BN) {
@@ -105,34 +93,34 @@ describe('nft raffle main test', () => {
10593
for (let i = 0; i < LEFT_NFTS_COUNT; i += 1) {
10694
const result = await simpleTransferNFT(
10795
raffleLocal,
108-
NFTS[i].addr,
96+
NFTS[i].address,
10997
LEFT_USER,
11098
COINS_FOR_NFT
11199
)
112100
const get = await raffleLocal.getRaffleState()
113101
if (get.nfts != null) {
114-
expect(get.nfts.get(buffer256ToDec(NFTS[i].addr.hash))).to.equals(2)
102+
expect(get.nfts.get(buffer256ToDec(NFTS[i].address.hash))).to.equals('left received')
115103
}
116104
expect(result.exit_code).to.equals(TVM_EXIT_CODES.OK)
117105
expect(get.leftNftsReceived).to.equals(i + 1)
118106
}
119107
for (let i = LEFT_NFTS_COUNT; i < RIGHT_NFTS_COUNT + LEFT_NFTS_COUNT - 1; i += 1) {
120108
const result = await simpleTransferNFT(
121109
raffleLocal,
122-
NFTS[i].addr,
110+
NFTS[i].address,
123111
RIGHT_USER,
124112
COINS_FOR_NFT
125113
)
126114
const get = await raffleLocal.getRaffleState()
127115
if (get.nfts != null) {
128-
expect(get.nfts.get(buffer256ToDec(NFTS[i].addr.hash))).to.equals(3)
116+
expect(get.nfts.get(buffer256ToDec(NFTS[i].address.hash))).to.equals('right received')
129117
}
130118
expect(result.exit_code).to.equals(TVM_EXIT_CODES.OK)
131119
expect(get.rightNftsReceived).to.equals(i - LEFT_NFTS_COUNT + 1)
132120
}
133121
const lastTransaction = await simpleTransferNFT(
134122
raffleLocal,
135-
NFTS[LEFT_NFTS_COUNT + RIGHT_NFTS_COUNT - 1].addr,
123+
NFTS[LEFT_NFTS_COUNT + RIGHT_NFTS_COUNT - 1].address,
136124
RIGHT_USER,
137125
COINS_FOR_NFT
138126
)
@@ -141,46 +129,46 @@ describe('nft raffle main test', () => {
141129

142130
it('1) simple NFT transfer', async () => {
143131
const smc = await RaffleLocal.createFromConfig(data)
144-
const result = await simpleTransferNFT(smc, NFTS[0].addr, LEFT_USER, COINS_FOR_NFT)
132+
const result = await simpleTransferNFT(smc, NFTS[0].address, LEFT_USER, COINS_FOR_NFT)
145133
const get = await smc.getRaffleState()
146134
if (get.nfts != null) {
147-
expect(get.nfts.get(buffer256ToDec(NFTS[0].addr.hash))).to.equals(2)
135+
expect(get.nfts.get(buffer256ToDec(NFTS[0].address.hash))).to.equals('left received')
148136
}
149137
expect(result.exit_code).to.equals(TVM_EXIT_CODES.OK)
150138
expect(get.leftNftsReceived).to.equals(1)
151-
expect(get.leftCoinsGot.toNumber()).to.equals(toNano(COMMISSION_FOR_MP + COMMISSION_FOR_NFT).toNumber())
139+
expect(get.leftCoinsGot.toNumber()).to.equals(toNano(NFT_TRANSFER_FEE + MARKETPLACE_FEE).toNumber())
152140
})
153141

154142
it('2) NFT transfer, but wrong commission', async () => {
155143
const smc = await RaffleLocal.createFromConfig(data)
156-
const result = await simpleTransferNFT(smc, NFTS[0].addr, LEFT_USER, toNano(0.1))
144+
const result = await simpleTransferNFT(smc, NFTS[0].address, LEFT_USER, toNano(0.1))
157145
const get = await smc.getRaffleState()
158146
if (get.nfts != null) {
159-
expect(get.nfts.get(buffer256ToDec(NFTS[0].addr.hash))).to.equals(0)
147+
expect(get.nfts.get(buffer256ToDec(NFTS[0].address.hash))).to.equals('left not received')
160148
}
161149
expect(result.exit_code).to.equals(TVM_EXIT_CODES.OK)
162150
expect(result.actionList[0].type).to.equals('send_msg')
163151
expect(get.leftNftsReceived).to.equals(0)
164152
})
165153
it('3) NFT transfer, but wrong NFT address', async () => {
166154
const smc = await RaffleLocal.createFromConfig(data)
167-
const result = await simpleTransferNFT(smc, getRandSigner(), LEFT_USER, COINS_FOR_NFT)
155+
const result = await simpleTransferNFT(smc, randomAddress(), LEFT_USER, COINS_FOR_NFT)
168156
const get = await smc.getRaffleState()
169157
expect(result.exit_code).to.equals(TVM_EXIT_CODES.OK)
170158
expect(get.leftNftsReceived).to.equals(0)
171159
expect(get.leftCoinsGot.toNumber()).to.equals(0)
172160
})
173161
it('4) Left and Right NFT transfer', async () => {
174162
const smc = await RaffleLocal.createFromConfig(data)
175-
const result1 = await simpleTransferNFT(smc, NFTS[0].addr, LEFT_USER, COINS_FOR_NFT)
163+
const result1 = await simpleTransferNFT(smc, NFTS[0].address, LEFT_USER, COINS_FOR_NFT)
176164
expect(result1.exit_code).to.equals(TVM_EXIT_CODES.OK)
177-
const result2 = await simpleTransferNFT(smc, NFTS[3].addr, RIGHT_USER, COINS_FOR_NFT)
165+
const result2 = await simpleTransferNFT(smc, NFTS[3].address, RIGHT_USER, COINS_FOR_NFT)
178166
expect(result2.exit_code).to.equals(TVM_EXIT_CODES.OK)
179167

180168
const get = await smc.getRaffleState()
181169
if (get.nfts != null) {
182-
expect(get.nfts.get(buffer256ToDec(NFTS[0].addr.hash))).to.equals(2)
183-
expect(get.nfts.get(buffer256ToDec(NFTS[3].addr.hash))).to.equals(3)
170+
expect(get.nfts.get(buffer256ToDec(NFTS[0].address.hash))).to.equals('left received')
171+
expect(get.nfts.get(buffer256ToDec(NFTS[3].address.hash))).to.equals('right received')
184172
}
185173
})
186174
it('5) raffle cancel', async () => {
@@ -205,9 +193,9 @@ describe('nft raffle main test', () => {
205193
})
206194
it('6) raffle cancel + return nft', async () => {
207195
const smc = await RaffleLocal.createFromConfig(data)
208-
const result1 = await simpleTransferNFT(smc, NFTS[0].addr, LEFT_USER, COINS_FOR_NFT)
196+
const result1 = await simpleTransferNFT(smc, NFTS[0].address, LEFT_USER, COINS_FOR_NFT)
209197
expect(result1.exit_code).to.equals(TVM_EXIT_CODES.OK)
210-
const result2 = await simpleTransferNFT(smc, NFTS[3].addr, RIGHT_USER, COINS_FOR_NFT)
198+
const result2 = await simpleTransferNFT(smc, NFTS[3].address, RIGHT_USER, COINS_FOR_NFT)
211199
expect(result2.exit_code).to.equals(TVM_EXIT_CODES.OK)
212200
const result = await smc.contract.sendInternalMessage(new InternalMessage({
213201
to: smc.address,
@@ -229,13 +217,13 @@ describe('nft raffle main test', () => {
229217
})
230218
it('7) raffle cancel with wrong addr', async () => {
231219
const smc = await RaffleLocal.createFromConfig(data)
232-
const result1 = await simpleTransferNFT(smc, NFTS[0].addr, LEFT_USER, COINS_FOR_NFT)
220+
const result1 = await simpleTransferNFT(smc, NFTS[0].address, LEFT_USER, COINS_FOR_NFT)
233221
expect(result1.exit_code).to.equals(TVM_EXIT_CODES.OK)
234-
const result2 = await simpleTransferNFT(smc, NFTS[0].addr, RIGHT_USER, COINS_FOR_NFT)
222+
const result2 = await simpleTransferNFT(smc, NFTS[0].address, RIGHT_USER, COINS_FOR_NFT)
235223
expect(result2.exit_code).to.equals(TVM_EXIT_CODES.OK)
236224
const result = await smc.contract.sendInternalMessage(new InternalMessage({
237225
to: smc.address,
238-
from: getRandSigner(),
226+
from: randomAddress(),
239227
value: toNano(0.1),
240228
bounce: true,
241229
body: new CommonMessageInfo({ body: new CellMessage(Queries.cancel()) })
@@ -259,7 +247,7 @@ describe('nft raffle main test', () => {
259247
const smc = await RaffleLocal.createFromConfig(data)
260248
const result = await smc.contract.sendInternalMessage(new InternalMessage({
261249
to: smc.address,
262-
from: getRandSigner(),
250+
from: randomAddress(),
263251
value: toNano(0.5),
264252
bounce: true,
265253
body: new CommonMessageInfo({ body: new CellMessage(Queries.addCoins()) })
@@ -291,7 +279,7 @@ describe('nft raffle main test', () => {
291279
expect(get.state).to.be.equals(STATES.Canceled)
292280
const result = await smc.contract.sendInternalMessage(new InternalMessage({
293281
to: smc.address,
294-
from: getRandSigner(),
282+
from: randomAddress(),
295283
value: toNano(0.5),
296284
bounce: true,
297285
body: new CommonMessageInfo({ body: new CellMessage(Queries.sendTrans()) })

packages/contracts/nft-raffle/raffle.local.ts

+29-12
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,33 @@ type StateResponse = {
2222
rightCommission: BN,
2323
leftCoinsGot: BN,
2424
rightCoinsGot: BN,
25-
coinsForNft: BN,
26-
nfts: Map<string, number> | null,
27-
raffledNfts: Map<string, boolean> | null
25+
nftTransferFee: BN,
26+
marketplaceFee: BN,
27+
nfts: Map<string, string> | null,
28+
raffledNfts: Map<string, string> | null
2829
}
2930

30-
function DictToMapN (slice : Slice): number {
31-
return slice.readUint(4).toNumber().valueOf()
31+
function DictToMapN (slice : Slice): string {
32+
const value = slice.readUint(4).toNumber()
33+
if (value == 0) {
34+
return 'left not received'
35+
}
36+
if (value == 1) {
37+
return 'right not received'
38+
}
39+
if (value == 2) {
40+
return 'left received'
41+
} else {
42+
return 'right received'
43+
}
3244
}
3345

34-
function DictToMapB (slice: Slice): boolean {
35-
return slice.readBit()
46+
function DictToMapB (slice: Slice): string {
47+
if(slice.readBit() == false) {
48+
return 'left'
49+
} else {
50+
return 'right'
51+
}
3652
}
3753

3854
export class RaffleLocal {
@@ -52,15 +68,15 @@ export class RaffleLocal {
5268
const [ state, rightNftsCount, rightNftsReceived, leftNftsCount,
5369
leftNftsReceived, leftUser, rightUser, superUser, leftCommission,
5470
rightCommission, leftCoinsGot, rightCoinsGot,
55-
coinsForNft, nfts, raffledNfts ] = res.result as [BN, BN,
71+
nftTransferFee, marketplaceFee, nfts, raffledNfts ] = res.result as [BN, BN,
5672
BN, BN,
57-
BN, Slice, Slice, Slice, BN, BN, BN, BN, BN, Cell, Cell, Cell]
58-
const nftMap = nfts ? parseDict<number>(
73+
BN, Slice, Slice, Slice, BN, BN, BN, BN, BN, BN, Cell, Cell, Cell]
74+
const nftMap = nfts ? parseDict<string>(
5975
nfts.beginParse(),
6076
256,
6177
DictToMapN
6278
) : null
63-
const raffledMap = raffledNfts ? parseDict<boolean>(
79+
const raffledMap = raffledNfts ? parseDict<string>(
6480
raffledNfts.beginParse(),
6581
256,
6682
DictToMapB
@@ -78,7 +94,8 @@ export class RaffleLocal {
7894
rightCommission: rightCommission,
7995
leftCoinsGot: leftCoinsGot,
8096
rightCoinsGot: rightCoinsGot,
81-
coinsForNft: coinsForNft,
97+
nftTransferFee: nftTransferFee,
98+
marketplaceFee: marketplaceFee,
8299
nfts: nftMap,
83100
raffledNfts: raffledMap
84101
}

packages/contracts/nft-raffle/raffle.queries.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { Builder, Address, Cell, Slice, parseDict, toNano } from 'ton'
22
import BN from 'bn.js'
3-
import { SmartContract } from 'ton-contract-executor'
4-
import { getRandSigner } from './raffle.signers'
3+
import { randomAddress } from '../../utils/randomAddress'
54

65
export const OperationCodes = {
76
ownershipAssigned: 0x05138d91,
@@ -33,7 +32,7 @@ export const Queries = {
3332
sendTrans: () => {
3433
const body = new Builder()
3534
.storeUint(0x18, 6)
36-
.storeAddress(getRandSigner())
35+
.storeAddress(randomAddress())
3736
.storeCoins(toNano(0.1))
3837
.storeUint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
3938
const msg = new Builder()

packages/contracts/nft-raffle/raffle.signers.ts

-8
This file was deleted.

0 commit comments

Comments
 (0)