From 0bd8bf013ffd6b12efbe05352f9a899d19877f43 Mon Sep 17 00:00:00 2001 From: robin Date: Wed, 3 Jul 2024 20:21:07 +0800 Subject: [PATCH 1/3] fix: get admin address may be null --- src/jetton/JettonMaster.spec.ts | 58 +++++++++++++++++++++-------- src/jetton/JettonMaster.ts | 65 +++++++++++++++++++-------------- 2 files changed, 80 insertions(+), 43 deletions(-) diff --git a/src/jetton/JettonMaster.spec.ts b/src/jetton/JettonMaster.spec.ts index d5650347..4aa0e3f3 100644 --- a/src/jetton/JettonMaster.spec.ts +++ b/src/jetton/JettonMaster.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) Whales Corp. + * Copyright (c) Whales Corp. * All Rights Reserved. * * This source code is licensed under the MIT license found in the @@ -11,18 +11,44 @@ import { createTestClient } from "../utils/createTestClient"; import { JettonMaster } from "./JettonMaster"; import { JettonWallet } from "./JettonWallet"; -describe('JettonMaster', () => { - it('should resolve jetton wallet address', async () => { - let client = createTestClient('mainnet'); - let master = client.open(JettonMaster.create(Address.parse('EQDQoc5M3Bh8eWFephi9bClhevelbZZvWhkqdo80XuY_0qXv'))); - let walletAddress = await master.getWalletAddress(Address.parse('EQCo6VT63H1vKJTiUo6W4M8RrTURCyk5MdbosuL5auEqpz-C')); - let jettonData = await master.getJettonData(); - expect(walletAddress.equals(Address.parse('EQDslTlGmbLTFi0j4MPT7UVggWR7XRDI2bW6vmNG6Tc_FBDE'))).toBe(true); - expect(jettonData.mintable).toBe(true); - expect(jettonData.adminAddress.equals(Address.parse('EQCppzUtmGSMg3FIRlFLzhToqbaC0xjmjzOn0o7H4M8Aua1t'))).toBe(true); - - let wallet = client.open(JettonWallet.create(walletAddress)); - let balance = await wallet.getBalance(); - expect(balance).toBe(0n); - }); -}); \ No newline at end of file +describe("JettonMaster", () => { + it("should resolve jetton wallet address", async () => { + let client = createTestClient("mainnet"); + let master = client.open( + JettonMaster.create( + Address.parse("EQDQoc5M3Bh8eWFephi9bClhevelbZZvWhkqdo80XuY_0qXv") + ) + ); + let walletAddress = await master.getWalletAddress( + Address.parse("EQCo6VT63H1vKJTiUo6W4M8RrTURCyk5MdbosuL5auEqpz-C") + ); + let jettonData = await master.getJettonData(); + expect( + walletAddress.equals( + Address.parse("EQDslTlGmbLTFi0j4MPT7UVggWR7XRDI2bW6vmNG6Tc_FBDE") + ) + ).toBe(true); + expect(jettonData.mintable).toBe(true); + expect( + jettonData.adminAddress?.equals( + Address.parse("EQCppzUtmGSMg3FIRlFLzhToqbaC0xjmjzOn0o7H4M8Aua1t") + ) + ).toBe(true); + + let wallet = client.open(JettonWallet.create(walletAddress)); + let balance = await wallet.getBalance(); + expect(balance).toBe(0n); + }); + it("should resolve jetton master data", async () => { + let client = createTestClient("mainnet"); + let master = client.open( + JettonMaster.create( + Address.parse("EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO") + ) + ); + let jettonData = await master.getJettonData(); + + expect(jettonData.mintable).toBe(true); + expect(jettonData.adminAddress).toBe(null); + }); +}); diff --git a/src/jetton/JettonMaster.ts b/src/jetton/JettonMaster.ts index 9bc8556a..e02d779b 100644 --- a/src/jetton/JettonMaster.ts +++ b/src/jetton/JettonMaster.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) Whales Corp. + * Copyright (c) Whales Corp. * All Rights Reserved. * * This source code is licensed under the MIT license found in the @@ -9,35 +9,46 @@ import { Address, beginCell, Contract, ContractProvider } from "@ton/core"; export class JettonMaster implements Contract { + static create(address: Address) { + return new JettonMaster(address); + } - static create(address: Address) { - return new JettonMaster(address); - } + readonly address: Address; - readonly address: Address; + constructor(address: Address) { + this.address = address; + } - constructor(address: Address) { - this.address = address; - } + async getWalletAddress(provider: ContractProvider, owner: Address) { + let res = await provider.get("get_wallet_address", [ + { type: "slice", cell: beginCell().storeAddress(owner).endCell() }, + ]); + return res.stack.readAddress(); + } - async getWalletAddress(provider: ContractProvider, owner: Address) { - let res = await provider.get('get_wallet_address', [{ type: 'slice', cell: beginCell().storeAddress(owner).endCell() }]); - return res.stack.readAddress(); + async getJettonData(provider: ContractProvider) { + let res = await provider.get("get_jetton_data", []); + let totalSupply = null, + mintable = null, + adminAddress = null, + content = null, + walletCode = null; + totalSupply = res.stack.readBigNumber(); + mintable = res.stack.readBoolean(); + content = res.stack.readCell(); + walletCode = res.stack.readCell(); + try { + adminAddress = res.stack.readAddress(); + } catch (error) { + adminAddress = null; } - async getJettonData(provider: ContractProvider) { - let res = await provider.get('get_jetton_data', []); - let totalSupply = res.stack.readBigNumber(); - let mintable = res.stack.readBoolean(); - let adminAddress = res.stack.readAddress(); - let content = res.stack.readCell(); - let walletCode = res.stack.readCell(); - return { - totalSupply, - mintable, - adminAddress, - content, - walletCode - }; - } -} \ No newline at end of file + return { + totalSupply, + mintable, + adminAddress, + content, + walletCode, + }; + } +} From 0fb2420c3c710375fff22301c142d769c13472b4 Mon Sep 17 00:00:00 2001 From: robin Date: Sat, 14 Sep 2024 11:05:29 +0800 Subject: [PATCH 2/3] fix: get adminAddress from readAddress to readAddressOpt --- src/jetton/JettonMaster.ts | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/jetton/JettonMaster.ts b/src/jetton/JettonMaster.ts index e02d779b..c3915807 100644 --- a/src/jetton/JettonMaster.ts +++ b/src/jetton/JettonMaster.ts @@ -28,20 +28,12 @@ export class JettonMaster implements Contract { async getJettonData(provider: ContractProvider) { let res = await provider.get("get_jetton_data", []); - let totalSupply = null, - mintable = null, - adminAddress = null, - content = null, - walletCode = null; - totalSupply = res.stack.readBigNumber(); - mintable = res.stack.readBoolean(); - content = res.stack.readCell(); - walletCode = res.stack.readCell(); - try { - adminAddress = res.stack.readAddress(); - } catch (error) { - adminAddress = null; - } + + const totalSupply = res.stack.readBigNumber(); + const mintable = res.stack.readBoolean(); + const content = res.stack.readCell(); + const walletCode = res.stack.readCell(); + const adminAddress = res.stack.readAddressOpt(); return { totalSupply, From b4f600b0f698f3c9d8af8b6f0f5c027fd17571c5 Mon Sep 17 00:00:00 2001 From: robin Date: Thu, 19 Sep 2024 13:05:09 +0800 Subject: [PATCH 3/3] feat: change adminAddress --- src/jetton/JettonMaster.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jetton/JettonMaster.ts b/src/jetton/JettonMaster.ts index c3915807..09e00296 100644 --- a/src/jetton/JettonMaster.ts +++ b/src/jetton/JettonMaster.ts @@ -31,9 +31,9 @@ export class JettonMaster implements Contract { const totalSupply = res.stack.readBigNumber(); const mintable = res.stack.readBoolean(); + const adminAddress = res.stack.readAddressOpt(); const content = res.stack.readCell(); const walletCode = res.stack.readCell(); - const adminAddress = res.stack.readAddressOpt(); return { totalSupply,