Skip to content

Commit 794f0d6

Browse files
authored
fix: check responseCode on mint/transfer in token-create examples (#136)
* fix: check responseCode on mint/transfer in token-create examples Signed-off-by: ValentinVPK <valentin.krumov@limechain.tech> * fix: transfer from contract-as-treasury in TokenCreate associate-and-transfer Signed-off-by: ValentinVPK <valentin.krumov@limechain.tech> * fix(tests): mint NFTs via mintNFT in HRC-904 and Token Query suites Signed-off-by: ValentinVPK <valentin.krumov@limechain.tech> --------- Signed-off-by: ValentinVPK <valentin.krumov@limechain.tech>
1 parent 95d4571 commit 794f0d6

9 files changed

Lines changed: 54 additions & 55 deletions

File tree

contracts/extensions/hip-1028/HIP1028Contract.sol

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import "../../token-service-v2/KeyHelper.sol";
88
import "../../token-service-v2/FeeHelper.sol";
99

1010
contract HIP1028Contract is HederaTokenService, KeyHelper, FeeHelper {
11+
error TokenMintFailed(int responseCode);
12+
1113
event TokenAddress(address);
1214
event TokenInfo(IHederaTokenService.TokenInfo);
1315
event FungibleTokenInfo(IHederaTokenService.FungibleTokenInfo);
@@ -180,7 +182,10 @@ contract HIP1028Contract is HederaTokenService, KeyHelper, FeeHelper {
180182

181183
createdAddress = tokenAddress;
182184

183-
HederaTokenService.mintToken(createdAddress, 0, new bytes[](1));
185+
(responseCode, , ) = HederaTokenService.mintToken(createdAddress, 0, new bytes[](1));
186+
if (responseCode != HederaResponseCodes.SUCCESS) {
187+
revert TokenMintFailed(responseCode);
188+
}
184189

185190
emit TokenAddress(createdAddress);
186191
}

contracts/extensions/token-create/TokenCreateContract.sol

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ contract TokenCreateContract is HederaTokenService, ExpiryHelper, KeyHelper {
1717
bool freezeDefaultStatus = false;
1818
bool finiteTotalSupplyType = true;
1919

20+
error TokenTransferFailed(int responseCode);
21+
2022
event ResponseCode(int responseCode);
2123
event CreatedToken(address tokenAddress);
2224
event MintedToken(int64 newTotalSupply, int64[] serialNumbers);
@@ -81,11 +83,14 @@ contract TokenCreateContract is HederaTokenService, ExpiryHelper, KeyHelper {
8183
return tokenAddress;
8284
}
8385

84-
function createFungibleTokenWithSECP256K1AdminKeyAssociateAndTransferToAddressPublic(address treasury, bytes memory adminKey, int64 amount) public payable {
85-
address tokenAddress = this.createFungibleTokenWithSECP256K1AdminKeyPublic{value : msg.value}(treasury, adminKey);
86+
function createFungibleTokenWithSECP256K1AdminKeyAssociateAndTransferToAddressPublic(address /* treasury */, bytes memory adminKey, int64 amount) public payable {
87+
address tokenAddress = this.createFungibleTokenWithSECP256K1AdminKeyPublic{value : msg.value}(address(this), adminKey);
8688
this.associateTokenPublic(msg.sender, tokenAddress);
8789
this.grantTokenKycPublic(tokenAddress, msg.sender);
88-
HederaTokenService.transferToken(tokenAddress, address(this), msg.sender, amount);
90+
int responseCode = HederaTokenService.transferToken(tokenAddress, address(this), msg.sender, amount);
91+
if (responseCode != HederaResponseCodes.SUCCESS) {
92+
revert TokenTransferFailed(responseCode);
93+
}
8994
}
9095

9196
function createFungibleTokenWithSECP256K1AdminKeyWithoutKYCPublic(
@@ -321,7 +326,10 @@ contract TokenCreateContract is HederaTokenService, ExpiryHelper, KeyHelper {
321326

322327
emit MintedToken(newTotalSupply, serialNumbers);
323328

324-
HederaTokenService.transferNFT(token, address(this), msg.sender, serialNumbers[0]);
329+
responseCode = HederaTokenService.transferNFT(token, address(this), msg.sender, serialNumbers[0]);
330+
if (responseCode != HederaResponseCodes.SUCCESS) {
331+
revert TokenTransferFailed(responseCode);
332+
}
325333
}
326334

327335
function associateTokensPublic(address account, address[] memory tokens) external returns (int256 responseCode) {

contracts/extensions/token-create/TokenCreateCustom.sol

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import "../../token-service/FeeHelper.sol";
1010
contract TokenCreateCustomContract is HederaTokenService, ExpiryHelper, KeyHelper, FeeHelper {
1111
bool finiteTotalSupplyType = true;
1212

13+
error TokenTransferFailed(int responseCode);
14+
1315
event ResponseCode(int responseCode);
1416
event CreatedToken(address tokenAddress);
1517
event TransferToken(address tokenAddress, address receiver, int64 amount);
@@ -179,15 +181,21 @@ contract TokenCreateCustomContract is HederaTokenService, ExpiryHelper, KeyHelpe
179181
returns (int responseCode, int64 newTotalSupply, int64[] memory serialNumbers) {
180182
(responseCode, newTotalSupply, serialNumbers) = mintTokenPublic(token, amount, metadata);
181183

182-
HederaTokenService.transferToken(token, address(this), receiver, amount);
184+
responseCode = HederaTokenService.transferToken(token, address(this), receiver, amount);
185+
if (responseCode != HederaResponseCodes.SUCCESS) {
186+
revert TokenTransferFailed(responseCode);
187+
}
183188
emit TransferToken(token, receiver, amount);
184189
}
185190

186191
function mintNonFungibleTokenToAddressPublic(address token, address receiver, int64 amount, bytes[] memory metadata) public
187192
returns (int responseCode, int64 newTotalSupply, int64[] memory serialNumbers) {
188193
(responseCode, newTotalSupply, serialNumbers) = mintTokenPublic(token, amount, metadata);
189194

190-
HederaTokenService.transferNFT(token, address(this), receiver, serialNumbers[0]);
195+
responseCode = HederaTokenService.transferNFT(token, address(this), receiver, serialNumbers[0]);
196+
if (responseCode != HederaResponseCodes.SUCCESS) {
197+
revert TokenTransferFailed(responseCode);
198+
}
191199
emit TransferToken(token, receiver, amount);
192200
}
193201

test/token-service/hrc-904/AirdropContract.js

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,7 @@ describe('HIP904Batch1 AirdropContract Test Suite', function () {
9393
it('should airdrop a non-fungible token (NFT) to a single account', async function () {
9494
const receiver = signers[1].address;
9595

96-
const serial = await utils.mintNFTToAddress(
97-
tokenCreateContract,
98-
nftTokenAddress,
99-
);
96+
const serial = await utils.mintNFT(tokenCreateContract, nftTokenAddress);
10097

10198
const txNFT = await airdropContract.nftAirdrop(
10299
nftTokenAddress,
@@ -178,10 +175,7 @@ describe('HIP904Batch1 AirdropContract Test Suite', function () {
178175

179176
it('should airdrop non-fungible token (NFT) to a single account using distribute', async function () {
180177
const receiver = signers[1].address;
181-
const serial = await utils.mintNFTToAddress(
182-
tokenCreateContract,
183-
nftTokenAddress,
184-
);
178+
const serial = await utils.mintNFT(tokenCreateContract, nftTokenAddress);
185179

186180
const txNFT = await airdropContract.nftAirdropDistribute(
187181
nftTokenAddress,
@@ -204,12 +198,8 @@ describe('HIP904Batch1 AirdropContract Test Suite', function () {
204198
hapi,
205199
);
206200
const serials = [];
207-
serials.push(
208-
await utils.mintNFTToAddress(tokenCreateContract, nftTokenAddress),
209-
);
210-
serials.push(
211-
await utils.mintNFTToAddress(tokenCreateContract, nftTokenAddress),
212-
);
201+
serials.push(await utils.mintNFT(tokenCreateContract, nftTokenAddress));
202+
serials.push(await utils.mintNFT(tokenCreateContract, nftTokenAddress));
213203

214204
const txNFT = await airdropContract.nftAirdropDistribute(
215205
nftTokenAddress,
@@ -272,10 +262,7 @@ describe('HIP904Batch1 AirdropContract Test Suite', function () {
272262
contractAddresses,
273263
hapi,
274264
);
275-
const serial = await utils.mintNFTToAddress(
276-
tokenCreateContract,
277-
tokenAddress,
278-
);
265+
const serial = await utils.mintNFT(tokenCreateContract, tokenAddress);
279266
tokens.push(tokenAddress);
280267
serials.push(serial);
281268
}
@@ -327,7 +314,7 @@ describe('HIP904Batch1 AirdropContract Test Suite', function () {
327314

328315
it('should fail when the receiver does not have a valid account', async function () {
329316
const invalidReceiver = '0x000000000000000000000000000000000000dead';
330-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
317+
const mintedTokenSerialNumber = await utils.mintNFT(
331318
tokenCreateContract,
332319
nftTokenAddress,
333320
);
@@ -382,10 +369,7 @@ describe('HIP904Batch1 AirdropContract Test Suite', function () {
382369
contractAddresses,
383370
hapi,
384371
);
385-
const serial = await utils.mintNFTToAddress(
386-
tokenCreateContract,
387-
tokenAddress,
388-
);
372+
const serial = await utils.mintNFT(tokenCreateContract, tokenAddress);
389373
nftTokens.push(tokenAddress);
390374
nftSerials.push(serial);
391375
}

test/token-service/hrc-904/CancelAirdropContract.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ describe('HIP904Batch2 CancelAirdropContract Test Suite', function () {
129129
hapi,
130130
);
131131

132-
const serialNumber = await utils.mintNFTToAddress(
132+
const serialNumber = await utils.mintNFT(
133133
tokenCreateContract,
134134
nftTokenAddress,
135135
);

test/token-service/hrc-904/ClaimAirdropContract.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ describe('HIP904Batch3 ClaimAirdropContract Test Suite', function () {
132132
hapi,
133133
);
134134

135-
const serialNumber = await utils.mintNFTToAddress(
135+
const serialNumber = await utils.mintNFT(
136136
tokenCreateContract,
137137
nftTokenAddress,
138138
);
@@ -330,7 +330,7 @@ describe('HIP904Batch3 ClaimAirdropContract Test Suite', function () {
330330
);
331331
const nonExistentSerialNumber = 999;
332332

333-
const serialNumber = await utils.mintNFTToAddress(
333+
const serialNumber = await utils.mintNFT(
334334
tokenCreateContract,
335335
nftTokenAddress,
336336
);
@@ -369,7 +369,7 @@ describe('HIP904Batch3 ClaimAirdropContract Test Suite', function () {
369369
hapi,
370370
);
371371

372-
const serialNumber = await utils.mintNFTToAddress(
372+
const serialNumber = await utils.mintNFT(
373373
tokenCreateContract,
374374
nftTokenAddress,
375375
);
@@ -414,7 +414,7 @@ describe('HIP904Batch3 ClaimAirdropContract Test Suite', function () {
414414
hapi,
415415
);
416416

417-
const serialNumber = await utils.mintNFTToAddress(
417+
const serialNumber = await utils.mintNFT(
418418
tokenCreateContract,
419419
nftTokenAddress,
420420
);

test/token-service/hrc-904/IHRC904ProxyTests.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
159159
});
160160

161161
it('should cancel a pending airdrop for a non-fungible token (NFT)', async function () {
162-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
162+
const mintedTokenSerialNumber = await utils.mintNFT(
163163
tokenCreateContract,
164164
nftTokenAddress,
165165
);
@@ -255,7 +255,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
255255
});
256256

257257
it('should claim a pending airdrop for a non-fungible token (NFT)', async function () {
258-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
258+
const mintedTokenSerialNumber = await utils.mintNFT(
259259
tokenCreateContract,
260260
nftTokenAddress,
261261
);
@@ -309,7 +309,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
309309
contractAddresses,
310310
hapi,
311311
);
312-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
312+
const mintedTokenSerialNumber = await utils.mintNFT(
313313
tokenCreateContract,
314314
nftTokenAddress,
315315
);
@@ -357,7 +357,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
357357
let serialNumbers = [];
358358
for (let i = 0; i < 10; i++) {
359359
serialNumbers.push(
360-
await utils.mintNFTToAddress(tokenCreateContract, nftTokenAddress),
360+
await utils.mintNFT(tokenCreateContract, nftTokenAddress),
361361
);
362362
}
363363
serialNumbers = serialNumbers.map(BigInt);
@@ -412,7 +412,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
412412
});
413413

414414
it('should fail to cancel a pending airdrop for NFT when sender has no pending airdrops', async function () {
415-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
415+
const mintedTokenSerialNumber = await utils.mintNFT(
416416
tokenCreateContract,
417417
nftTokenAddress,
418418
);
@@ -425,7 +425,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
425425
});
426426

427427
it('should fail to cancel a pending airdrop for NFT when receiver has no valid account', async function () {
428-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
428+
const mintedTokenSerialNumber = await utils.mintNFT(
429429
tokenCreateContract,
430430
nftTokenAddress,
431431
);
@@ -451,7 +451,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
451451
});
452452

453453
it('should fail to claim NFT airdrop with no pending airdrops', async function () {
454-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
454+
const mintedTokenSerialNumber = await utils.mintNFT(
455455
tokenCreateContract,
456456
nftTokenAddress,
457457
);
@@ -464,7 +464,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
464464
});
465465

466466
it('should fail to claim NFT airdrop with an invalid account', async function () {
467-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
467+
const mintedTokenSerialNumber = await utils.mintNFT(
468468
tokenCreateContract,
469469
nftTokenAddress,
470470
);
@@ -496,7 +496,7 @@ describe('HIP904Batch2 IHRC904Facade Contract Test Suite', function () {
496496
contractAddresses,
497497
hapi,
498498
);
499-
const mintedTokenSerialNumber = await utils.mintNFTToAddress(
499+
const mintedTokenSerialNumber = await utils.mintNFT(
500500
tokenCreateContract,
501501
nftTokenAddress,
502502
);

test/token-service/hrc-904/TokenRejectContract.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,7 @@ describe('HIP904Batch3 TokenRejectContract Test Suite', function () {
107107
);
108108
const receiver = signers[1];
109109

110-
const serial = await utils.mintNFTToAddress(
111-
tokenCreateContract,
112-
nftTokenAddress,
113-
);
110+
const serial = await utils.mintNFT(tokenCreateContract, nftTokenAddress);
114111

115112
const airdropTx = await airdropContract.nftAirdrop(
116113
nftTokenAddress,
@@ -150,8 +147,8 @@ describe('HIP904Batch3 TokenRejectContract Test Suite', function () {
150147

151148
// Mint two NFTs and reject the SECOND serial. A regression to a hardcoded
152149
// serial (e.g. the previous `nftId.serial = 1`) would fail this case.
153-
await utils.mintNFTToAddress(tokenCreateContract, nftTokenAddress);
154-
const secondSerial = await utils.mintNFTToAddress(
150+
await utils.mintNFT(tokenCreateContract, nftTokenAddress);
151+
const secondSerial = await utils.mintNFT(
155152
tokenCreateContract,
156153
nftTokenAddress,
157154
);
@@ -306,10 +303,7 @@ describe('HIP904Batch3 TokenRejectContract Test Suite', function () {
306303
);
307304
const receiver = signers[1];
308305

309-
const serial = await utils.mintNFTToAddress(
310-
tokenCreateContract,
311-
nftTokenAddress,
312-
);
306+
const serial = await utils.mintNFT(tokenCreateContract, nftTokenAddress);
313307

314308
const airdropTx = await airdropContract.nftAirdrop(
315309
nftTokenAddress,

test/token-service/token-query/tokenQueryContract.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ describe('TokenQueryContract Test Suite', function () {
4343
tokenCreateContract,
4444
await tokenCreateContract.getAddress(),
4545
);
46-
mintedTokenSerialNumber = await utils.mintNFTToAddress(
46+
mintedTokenSerialNumber = await utils.mintNFT(
4747
tokenCreateContract,
4848
nftTokenAddress,
4949
);

0 commit comments

Comments
 (0)