Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions example/claim/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package main

import (
"encoding/base64"
"encoding/json"
"fmt"
"io"
"log"
"math/rand"
"net/http"

"github.com/xssnick/tonutils-go/address"
"github.com/xssnick/tonutils-go/tvm/cell"
)

const COMPRESSED_NFT_API_URL = "http://localhost:8081/v1"

func main() {
// 1. Fetch collection state
resp, err := http.Get(fmt.Sprintf("%s/state", COMPRESSED_NFT_API_URL))
if err != nil {
log.Fatalln("Fetch state err:", err.Error())
return
}
defer resp.Body.Close()

b, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatalln("ReadAll state err:", err.Error())
return
}

var state struct {
Address string `json:"address"`
}
err = json.Unmarshal(b, &state)
if err != nil {
log.Fatalln("Unmarshal state err:", err.Error())
return
}

// 2. Fetch proof cell for a specific item (by its index)
var itemIndex uint64 = 1
resp, err = http.Get(fmt.Sprintf("%s/items/%d", COMPRESSED_NFT_API_URL, itemIndex))
if err != nil {
log.Fatalln("Fetch item err:", err.Error())
return
}
defer resp.Body.Close()

b, err = io.ReadAll(resp.Body)
if err != nil {
log.Fatalln("ReadAll item err:", err.Error())
return
}

var item struct {
ProofCellBase64 string `json:"proof_cell"`
}
err = json.Unmarshal(b, &item)
if err != nil {
log.Fatalln("Unmarshal item err:", err.Error())
return
}

// 3. Prepare payload for the claim transacation
proofCellDecoded, err := base64.StdEncoding.DecodeString(item.ProofCellBase64)
if err != nil {
log.Fatalln("DecodeString err:", err.Error())
return
}
proofCell, err := cell.FromBOC(proofCellDecoded)
if err != nil {
log.Fatalln("FromBOC err:", err.Error())
return
}
payload := cell.BeginCell().
MustStoreUInt(0x13a3ca6, 32).
MustStoreUInt(rand.Uint64(), 64).
MustStoreUInt(itemIndex, 256).
MustStoreRef(proofCell).
EndCell()

// 4. Complete the transaction
collectionAddrs := address.MustParseRawAddr(state.Address)
amount := "85000000" // Claim transaction min is 0.085 TON (https://github.com/ton-community/compressed-nft-contract/blob/de529e67971f0c888ef496cf983d681a5a13a06b/contracts/collection_new.fc#L22)
link := fmt.Sprintf(
"ton://transfer/%v?amount=%s&bin=%v",
collectionAddrs.String(),
amount,
base64.RawURLEncoding.EncodeToString(payload.ToBOC()),
)
fmt.Println(link)
}
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ require (
github.com/labstack/echo/v4 v4.10.2
github.com/rs/zerolog v1.29.1
github.com/spf13/cobra v1.7.0
github.com/xssnick/tonutils-go v1.7.4
github.com/xssnick/tonutils-go v1.9.7
)

require (
Expand All @@ -30,10 +30,10 @@ require (
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasttemplate v1.2.2 // indirect
go.uber.org/atomic v1.7.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
golang.org/x/crypto v0.17.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/sync v0.2.0 // indirect
golang.org/x/sys v0.10.0 // indirect
golang.org/x/text v0.9.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.3.0 // indirect
)
16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,12 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/xssnick/tonutils-go v1.7.4 h1:t27eGhwkmaiSyslzZDAdOxM5cuEEjP2fMbyVxnXYWu0=
github.com/xssnick/tonutils-go v1.7.4/go.mod h1:wH8ldhLueyfXW15r3MyaIq9YzA+8bzvL6UMU2BLp08g=
github.com/xssnick/tonutils-go v1.9.7 h1:DRlTp9I4LmMXCQEIkoAT4H+10ShSz24tuzScg+SdThU=
github.com/xssnick/tonutils-go v1.9.7/go.mod h1:p1l1Bxdv9sz6x2jfbuGQUGJn6g5cqg7xsTp8rBHFoJY=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
Expand All @@ -94,10 +94,10 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo=
Expand Down