Skip to content

Commit c6c6186

Browse files
authored
Merge pull request #6671 from spacemeshos/athena-poc-token-mint-api
support proxy and token TXs in API
2 parents 25ee703 + 002ceb3 commit c6c6186

File tree

5 files changed

+72
-3
lines changed

5 files changed

+72
-3
lines changed

api/grpcserver/v2alpha1/account.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package v2alpha1
22

33
import (
44
"context"
5+
"encoding/hex"
56

67
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
78
spacemeshv2alpha1 "github.com/spacemeshos/api/release/go/spacemesh/v2alpha1"
@@ -73,12 +74,16 @@ func (s *AccountService) List(
7374
Counter: account.NextNonce,
7475
Balance: account.Balance,
7576
Layer: account.Layer.Uint32(),
77+
Storage: make(map[string][]byte, len(account.Storage)),
7678
},
7779
Projected: &spacemeshv2alpha1.AccountState{
7880
Counter: counterProjected,
7981
Balance: balanceProjected,
8082
},
8183
}
84+
for _, kv := range account.Storage {
85+
item.Current.Storage[hex.EncodeToString(kv.Key[:])] = kv.Value[:]
86+
}
8287
if account.TemplateAddress != nil {
8388
item.Template = account.TemplateAddress.String()
8489
}

api/grpcserver/v2alpha1/transaction.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ import (
2727
"github.com/spacemeshos/go-spacemesh/sql/transactions"
2828
"github.com/spacemeshos/go-spacemesh/system"
2929
"github.com/spacemeshos/go-spacemesh/vm/core"
30+
"github.com/spacemeshos/go-spacemesh/vm/templates/mint"
3031
"github.com/spacemeshos/go-spacemesh/vm/templates/multisig"
32+
tokenwallet "github.com/spacemeshos/go-spacemesh/vm/templates/token_wallet"
3133
"github.com/spacemeshos/go-spacemesh/vm/templates/wallet"
3234
)
3335

@@ -451,6 +453,19 @@ func toTxContents(rawTx []byte, header *types.TxHeader) (
451453
},
452454
}
453455
txType = spacemeshv2alpha1.Transaction_TRANSACTION_TYPE_DEPLOY
456+
case *wallet.ProxyArgs:
457+
contents := &spacemeshv2alpha1.TransactionContents_Proxy{
458+
Proxy: &spacemeshv2alpha1.ContentsProxy{
459+
Destination: args.Destination.String(),
460+
Amount: args.Amount,
461+
},
462+
}
463+
if args.Method != nil {
464+
contents.Proxy.Method = args.Method[:]
465+
}
466+
res.Contents = contents
467+
txType = spacemeshv2alpha1.Transaction_TRANSACTION_TYPE_PROXY
468+
454469
}
455470
case multisig.TemplateAddress:
456471
txArgs, err := multisig.ParseArgs(payload)
@@ -486,6 +501,54 @@ func toTxContents(rawTx []byte, header *types.TxHeader) (
486501
}
487502
txType = spacemeshv2alpha1.Transaction_TRANSACTION_TYPE_DEPLOY
488503
}
504+
case mint.TemplateAddress:
505+
txArgs, err := mint.ParseArgs(payload)
506+
if err != nil {
507+
return nil, txType, fmt.Errorf("%w: decoding TX args: %w", core.ErrMalformed, err)
508+
}
509+
switch args := txArgs.(type) {
510+
case *mint.SpawnArguments:
511+
res.Contents = &spacemeshv2alpha1.TransactionContents_MintSpawn{
512+
MintSpawn: &spacemeshv2alpha1.ContentsMintSpawn{
513+
Pubkey: args.Owner.String(),
514+
MaxSupply: args.MaxSupply,
515+
Price: args.Price,
516+
},
517+
}
518+
txType = spacemeshv2alpha1.Transaction_TRANSACTION_TYPE_MINT_SPAWN
519+
}
520+
case tokenwallet.TemplateAddress:
521+
txArgs, err := tokenwallet.ParseArgs(payload)
522+
if err != nil {
523+
return nil, txType, fmt.Errorf("%w: decoding TX args: %w", core.ErrMalformed, err)
524+
}
525+
switch args := txArgs.(type) {
526+
case *tokenwallet.SpawnArguments:
527+
res.Contents = &spacemeshv2alpha1.TransactionContents_TokenWalletSpawn{
528+
TokenWalletSpawn: &spacemeshv2alpha1.ContentsTokenWalletSpawn{
529+
Pubkey: args.Owner.String(),
530+
MintTemplate: args.MintTemplate.String(),
531+
WalletTemplate: args.WalletTemplate.String(),
532+
},
533+
}
534+
txType = spacemeshv2alpha1.Transaction_TRANSACTION_TYPE_TOKEN_WALLET_SPAWN
535+
case *tokenwallet.SendTokenArguments:
536+
res.Contents = &spacemeshv2alpha1.TransactionContents_TokenWalletSendToken{
537+
TokenWalletSendToken: &spacemeshv2alpha1.ContentsTokenWalletSendToken{
538+
Destination: args.To.String(),
539+
Amount: args.Amount,
540+
TokenId: args.TokenId.String(),
541+
},
542+
}
543+
txType = spacemeshv2alpha1.Transaction_TRANSACTION_TYPE_TOKEN_WALLET_SEND_TOKEN
544+
case *tokenwallet.SpendArguments:
545+
res.Contents = &spacemeshv2alpha1.TransactionContents_Send{
546+
Send: &spacemeshv2alpha1.ContentsSend{
547+
Destination: args.To.String(),
548+
Amount: args.Amount,
549+
},
550+
}
551+
}
489552
}
490553

491554
return res, txType, nil

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ require (
4343
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1
4444
github.com/seehuhn/mt19937 v1.0.0
4545
github.com/slok/go-http-metrics v0.13.0
46-
github.com/spacemeshos/api/release/go v1.57.1-0.20241210094511-56be061f5f86
46+
github.com/spacemeshos/api/release/go v1.57.1-0.20250129124411-4a935887cbbd
4747
github.com/spacemeshos/economics v0.1.4
4848
github.com/spacemeshos/fixed v0.1.2
4949
github.com/spacemeshos/go-scale v1.2.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,8 +644,8 @@ github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:Udh
644644
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
645645
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
646646
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
647-
github.com/spacemeshos/api/release/go v1.57.1-0.20241210094511-56be061f5f86 h1:cDO/aFNK8OCC13kwVDiU60o4QrKgesg2YiAMnmo79qY=
648-
github.com/spacemeshos/api/release/go v1.57.1-0.20241210094511-56be061f5f86/go.mod h1:Wfalxn+GgsRX32UTZkPkUX952P1bsGRVnCq1/BNHWJU=
647+
github.com/spacemeshos/api/release/go v1.57.1-0.20250129124411-4a935887cbbd h1:WeXQdbtsJ1xM1aRage/Jxhu5ZTx5hcYItRcRqL4exNk=
648+
github.com/spacemeshos/api/release/go v1.57.1-0.20250129124411-4a935887cbbd/go.mod h1:Wfalxn+GgsRX32UTZkPkUX952P1bsGRVnCq1/BNHWJU=
649649
github.com/spacemeshos/economics v0.1.4 h1:twlawrcQhYNqPgyDv08+24EL/OgUKz3d7q+PvJIAND0=
650650
github.com/spacemeshos/economics v0.1.4/go.mod h1:6HKWKiKdxjVQcGa2z/wA0LR4M/DzKib856bP16yqNmQ=
651651
github.com/spacemeshos/fixed v0.1.2 h1:pENQ8pXFAqin3f15ZLoOVVeSgcmcFJ0IFdFm4+9u4SM=

vm/templates/wallet/methods.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
type DeployArgs struct {
1515
Code []byte
1616
}
17+
1718
type ProxyArgs struct {
1819
Destination types.Address
1920
Method *athcon.MethodSelector

0 commit comments

Comments
 (0)