igor
2 years ago
6 changed files with 96 additions and 86 deletions
@ -0,0 +1,3 @@ |
|||||||
|
[submodule "contracts/dns-contract"] |
||||||
|
path = contracts/dns-contract |
||||||
|
url = https://github.com/ton-blockchain/dns-contract.git |
@ -1,32 +1,57 @@ |
|||||||
import BN from "bn.js"; |
import BN from "bn.js"; |
||||||
import { Cell, beginCell, Address } from "ton"; |
import { Cell, beginCell, Address } from "ton"; |
||||||
|
import { C7Config, SmartContract } from "ton-contract-executor"; |
||||||
import {encodeOffChainContent, makeSnakeCell} from "./utils"; |
import {encodeOffChainContent, makeSnakeCell} from "./utils"; |
||||||
|
|
||||||
// encode contract storage according to save_data() contract method
|
// encode contract storage according to save_data() contract method
|
||||||
|
|
||||||
// collection_content:^Cell
|
|
||||||
// nft_item_code:^Cell
|
// nft_item_code:^Cell
|
||||||
// uint256 index
|
// uint256 index
|
||||||
// MsgAddressInt collection_address
|
// MsgAddressInt collection_address
|
||||||
// MsgAddressInt owner_address
|
// MsgAddressInt owner_address
|
||||||
|
// collection_content:^Cell
|
||||||
// cell domain - e.g contains "alice" (without ending \0) for "alice.ton" domain
|
// cell domain - e.g contains "alice" (without ending \0) for "alice.ton" domain
|
||||||
// cell auction - auction info
|
// cell auction - auction info
|
||||||
// int last_fill_up_time
|
// int64 last_fill_up_time
|
||||||
export function data(params: { ownerAddress: Address; collectionAddress: Address, code: Cell, domain: String }): Cell { |
export function data(params: { ownerAddress: Address; collectionAddress: Address, code: Cell, domain: String }): Cell { |
||||||
return beginCell() |
return beginCell() |
||||||
.storeRef(encodeOffChainContent("https://agorata.io/collection.json")) // https://github.com/ton-blockchain/TEPs/blob/master/text/0064-token-data-standard.md
|
|
||||||
// For code: https://github.com/getgems-io/nft-contracts/blob/main/packages/contracts/sources/nft-auction/build.sh
|
// For code: https://github.com/getgems-io/nft-contracts/blob/main/packages/contracts/sources/nft-auction/build.sh
|
||||||
.storeRef(params.code) |
.storeRef(params.code) |
||||||
.storeUint8(0) |
.storeUint(0, 256) |
||||||
.storeAddress(params.collectionAddress) |
.storeAddress(params.collectionAddress) |
||||||
.storeAddress(params.ownerAddress) |
.storeAddress(params.ownerAddress) |
||||||
|
.storeRef(encodeOffChainContent("https://agorata.io/collection.json")) // https://github.com/ton-blockchain/TEPs/blob/master/text/0064-token-data-standard.md
|
||||||
.storeRef(makeSnakeCell(Buffer.from(params.domain))) |
.storeRef(makeSnakeCell(Buffer.from(params.domain))) |
||||||
.storeRef(beginCell().endCell()) |
.storeDict(null) |
||||||
.storeUint(0, 64).endCell(); |
.storeUint(0, 64).endCell(); |
||||||
} |
} |
||||||
|
|
||||||
|
export function auctionWithWinner(winnerAddress: Address) { |
||||||
|
return beginCell().storeAddress(winnerAddress).storeCoins(0).storeUint(0, 64) |
||||||
|
} |
||||||
|
|
||||||
|
export function setContractBalance(contract: SmartContract, balance: number) { |
||||||
|
contract.setC7Config({balance: balance}); |
||||||
|
} |
||||||
|
|
||||||
|
export function TON(): number { return 1000000000; } |
||||||
|
|
||||||
// message encoders for all ops (see contracts/imports/constants.fc for consts)
|
// message encoders for all ops (see contracts/imports/constants.fc for consts)
|
||||||
|
|
||||||
export function transferOwnership(params: { newOwnerAddress: Address }): Cell { |
export function transferOwnership(params: { newOwnerAddress: Address }): Cell { |
||||||
return beginCell().storeUint(0x2da38aaf, 32).storeUint(0, 64).storeAddress(params.newOwnerAddress).endCell(); |
return beginCell().storeUint(0x5fcc3d14, 32).storeUint(0, 64).storeAddress(params.newOwnerAddress).storeAddress(null).storeInt(0, 1).storeCoins(1 * TON()).endCell(); |
||||||
|
} |
||||||
|
|
||||||
|
export function currentState(contract: SmartContract) { |
||||||
|
let reader = contract.dataCell.beginParse(); |
||||||
|
return { |
||||||
|
nft_item_code: reader.readRef(), |
||||||
|
index: reader.readUint(256), |
||||||
|
collectionAddress: reader.readAddress(), |
||||||
|
ownerAddress: reader.readAddress(), |
||||||
|
collectionContent: reader.readRef(), |
||||||
|
domain: reader.readRef(), |
||||||
|
// auction: reader.readCell(), – TODO: still havent's figured out to load auction here
|
||||||
|
// lastFillUpTime: reader.readInt(64)
|
||||||
|
} |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue