mirror of
https://github.com/galacticship/terra.git
synced 2025-04-19 09:33:12 +00:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
399f71ef97 | |||
5fdd6f16ff | |||
fb1a965999 | |||
b4bed377b8 | |||
e18b524bc0 | |||
85c0bf9099 | |||
5224955822 | |||
4aa9e12c92 | |||
b0d2c071c5 | |||
87543d604e | |||
ddca0be1ce |
4
go.mod
4
go.mod
@ -9,7 +9,7 @@ require (
|
||||
github.com/hashicorp/go-multierror v1.0.0
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/shopspring/decimal v1.3.1
|
||||
github.com/terra-money/core v0.5.17
|
||||
github.com/terra-money/core v0.5.18
|
||||
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f
|
||||
)
|
||||
|
||||
@ -17,7 +17,7 @@ require (
|
||||
filippo.io/edwards25519 v1.0.0-beta.2 // indirect
|
||||
github.com/99designs/keyring v1.1.6 // indirect
|
||||
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
|
||||
github.com/CosmWasm/wasmvm v0.16.3 // indirect
|
||||
github.com/CosmWasm/wasmvm v0.16.6 // indirect
|
||||
github.com/DataDog/zstd v1.4.5 // indirect
|
||||
github.com/armon/go-metrics v0.3.9 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
|
12
go.sum
12
go.sum
@ -57,8 +57,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg=
|
||||
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4=
|
||||
github.com/CosmWasm/wasmvm v0.16.3 h1:hUf33EHRmyyvKMhwVl7nMaAOY0vYJVB4bhU+HPfHfBM=
|
||||
github.com/CosmWasm/wasmvm v0.16.3/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A=
|
||||
github.com/CosmWasm/wasmvm v0.16.6 h1:YEqno8DJifj+1NixXSJGOXCKGX4Qb4kdYK1+JIHLpog=
|
||||
github.com/CosmWasm/wasmvm v0.16.6/go.mod h1:saGLYYSj6rRVFL6EaWZHzXbLD3Rgn8ZEK+0H+UjKOE4=
|
||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
|
||||
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
|
||||
@ -342,8 +342,8 @@ github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64=
|
||||
github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
@ -761,7 +761,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||
github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA=
|
||||
github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk=
|
||||
github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM=
|
||||
github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s=
|
||||
@ -770,12 +769,11 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM
|
||||
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk=
|
||||
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
|
||||
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
|
||||
github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4=
|
||||
github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw=
|
||||
github.com/tendermint/tm-db v0.6.6 h1:EzhaOfR0bdKyATqcd5PNeyeq8r+V4bRPHBfyFdD9kGM=
|
||||
github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI=
|
||||
github.com/terra-money/core v0.5.17 h1:LyQKVLEawSqn+AV+BcslP9H6qFUvFJxDBHzjvm3yl+Q=
|
||||
github.com/terra-money/core v0.5.17/go.mod h1:MEpq9DsEr2lBs8P7GiIJLfBqCZZKHfdl5qEs0nOcQkg=
|
||||
github.com/terra-money/core v0.5.18 h1:2GUQ1aKGcwbsgVnnvwsfEqer48cVjJfkEVK5oqvlXsw=
|
||||
github.com/terra-money/core v0.5.18/go.mod h1:0VGBjwCId9ak1XDARC9pSd0aPiZI3EYFLTT3J0qYUps=
|
||||
github.com/terra-money/cosmos-sdk v0.44.5-terra.2 h1:v56ZIECZAWerXHE++7JY8GM+oR+W5nt37tKWgEfvl8o=
|
||||
github.com/terra-money/cosmos-sdk v0.44.5-terra.2/go.mod h1:/tqCMnVCrX7F7iL2ALCsGdYmhx0jfgFG/50gP8jt6bI=
|
||||
github.com/terra-money/ledger-terra-go v0.11.2 h1:BVXZl+OhJOri6vFNjjVaTabRLApw9MuG7mxWL4V718c=
|
||||
|
@ -51,11 +51,31 @@ func NewRouter(querier *terra.Querier) (terra.Router, error) {
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init ASTROLUNA pair")
|
||||
}
|
||||
PRISMUST, err := NewXykPair(querier, "terra10nfk6fcz5nc5uru964qmpels9ctg6j0vczjgl7", terra.PRISM, terra.UST, terra.ASTRO_PRISMUSTLP)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init PRISMUST pair")
|
||||
}
|
||||
YLUNALUNA, err := NewXykPair(querier, "terra1aa68js6yxavg9zzzle2zaynem9cstvmaj3xyu3", terra.YLUNA, terra.LUNA, terra.ASTRO_YLUNALUNALP)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init YLUNALUNA pair")
|
||||
}
|
||||
|
||||
LUNABLUNA, err := NewStablePair(querier, "terra1j66jatn3k50hjtg2xemnjm8s7y8dws9xqa5y8w", terra.LUNA, terra.BLUNA, terra.ASTRO_LUNABLUNALP)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init LUNABLUNA pair")
|
||||
}
|
||||
MARSXMARS, err := NewStablePair(querier, "terra1dawj5mr2qt2nlurge30lfgjg6ly4ls99yeyd25", terra.MARS, terra.XMARS, terra.ASTRO_MARSXMARSLP)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init MARSXMARS pair")
|
||||
}
|
||||
KUSTUST, err := NewStablePair(querier, "terra15rx5ghq4nxrv62fqvdvm78kuasfkl95c6mcmqs", terra.KUST, terra.UST, terra.ASTRO_KUSTUSTLP)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init KUSTUST pair")
|
||||
}
|
||||
PRISMXPRISM, err := NewStablePair(querier, "terra1c868juk7lk9vuvetf0644qgxscsu4xwag6yaxs", terra.PRISM, terra.XPRISM, terra.ASTRO_PRISMXPRISMLP)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init KUSTUST pair")
|
||||
}
|
||||
|
||||
r.SetPairs(
|
||||
LUNAUST,
|
||||
@ -68,6 +88,11 @@ func NewRouter(querier *terra.Querier) (terra.Router, error) {
|
||||
ASTROUST,
|
||||
ASTROLUNA,
|
||||
LUNABLUNA,
|
||||
MARSXMARS,
|
||||
KUSTUST,
|
||||
PRISMUST,
|
||||
PRISMXPRISM,
|
||||
YLUNALUNA,
|
||||
//{terra.VKR, terra.UST},
|
||||
//{terra.APOLLO, terra.UST},
|
||||
//{terra.ORION, terra.UST},
|
||||
|
@ -1,6 +1,8 @@
|
||||
package astroport
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/galacticship/terra"
|
||||
"github.com/galacticship/terra/cosmos"
|
||||
"github.com/pkg/errors"
|
||||
@ -22,6 +24,45 @@ func NewStaking(querier *terra.Querier) (*Staking, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Staking) TotalShares(ctx context.Context) (decimal.Decimal, error) {
|
||||
var q struct {
|
||||
TotalShares struct{} `json:"total_shares"`
|
||||
}
|
||||
var r decimal.Decimal
|
||||
err := s.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return decimal.Zero, errors.Wrap(err, "querying contract")
|
||||
}
|
||||
return terra.XASTRO.ValueFromTerra(r), nil
|
||||
}
|
||||
|
||||
func (s *Staking) TotalDeposit(ctx context.Context) (decimal.Decimal, error) {
|
||||
var q struct {
|
||||
TotalDeposit struct{} `json:"total_deposit"`
|
||||
}
|
||||
var r decimal.Decimal
|
||||
err := s.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return decimal.Zero, errors.Wrap(err, "querying contract")
|
||||
}
|
||||
return terra.ASTRO.ValueFromTerra(r), nil
|
||||
}
|
||||
|
||||
func (s *Staking) XASTROPerASTRO(ctx context.Context) (decimal.Decimal, error) {
|
||||
totalShares, err := s.TotalShares(ctx)
|
||||
if err != nil {
|
||||
return decimal.Zero, errors.Wrap(err, "getting total shares")
|
||||
}
|
||||
totalDeposit, err := s.TotalDeposit(ctx)
|
||||
if err != nil {
|
||||
return decimal.Zero, errors.Wrap(err, "getting total deposit")
|
||||
}
|
||||
if totalDeposit.Equals(decimal.Zero) {
|
||||
return decimal.NewFromInt(1), nil
|
||||
}
|
||||
return totalShares.Div(totalDeposit), nil
|
||||
}
|
||||
|
||||
func (s *Staking) NewEnterMessage(sender cosmos.AccAddress, amount decimal.Decimal) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
Enter struct{} `json:"enter"`
|
||||
|
243
protocols/deviantfactions/market.go
Normal file
243
protocols/deviantfactions/market.go
Normal file
@ -0,0 +1,243 @@
|
||||
package deviantfactions
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/galacticship/terra"
|
||||
"github.com/galacticship/terra/cosmos"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type Market struct {
|
||||
*terra.Contract
|
||||
}
|
||||
|
||||
func NewMarket(q *terra.Querier) (*Market, error) {
|
||||
contract, err := terra.NewContract(q, "terra1t37vatdcsmg4qlyy8n4fgapecce5g4gw5mlzlt")
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init contract object")
|
||||
}
|
||||
|
||||
return &Market{
|
||||
Contract: contract,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type Listing struct {
|
||||
Owner string
|
||||
TokenId string
|
||||
AskToken terra.Token
|
||||
Price decimal.Decimal
|
||||
BlockCreated int64
|
||||
BlockExpires int64
|
||||
}
|
||||
|
||||
func (m *Market) AllCollections(ctx context.Context) ([]string, error) {
|
||||
var res []string
|
||||
startAfter := ""
|
||||
for {
|
||||
tmp, err := m.allCollectionsPage(ctx, 30, startAfter)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "getting page with startafter %s", startAfter)
|
||||
}
|
||||
res = append(res, tmp...)
|
||||
if len(tmp) < 30 {
|
||||
break
|
||||
}
|
||||
startAfter = tmp[len(tmp)-1]
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (m *Market) allCollectionsPage(ctx context.Context, limit int, startAfter string) ([]string, error) {
|
||||
var q struct {
|
||||
AllCollections struct {
|
||||
Limit int `json:"limit"`
|
||||
StartAfter string `json:"start_after"`
|
||||
} `json:"all_collections"`
|
||||
}
|
||||
q.AllCollections.Limit = limit
|
||||
q.AllCollections.StartAfter = startAfter
|
||||
var r struct {
|
||||
Collections []string `json:"collections"`
|
||||
}
|
||||
err := m.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "querying contract store")
|
||||
}
|
||||
|
||||
return r.Collections, nil
|
||||
}
|
||||
|
||||
func (m *Market) AllListedTokens(ctx context.Context, collectionIds []string) ([]Listing, error) {
|
||||
var res []Listing
|
||||
startAfter := ""
|
||||
for {
|
||||
tmp, err := m.allListedTokensPage(ctx, collectionIds, 30, startAfter)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "getting page with startafter %s", startAfter)
|
||||
}
|
||||
res = append(res, tmp...)
|
||||
if len(tmp) < 30 {
|
||||
break
|
||||
}
|
||||
startAfter = tmp[len(tmp)-1].TokenId
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (m *Market) allListedTokensPage(ctx context.Context, collectionIds []string, limit int, startAfter string) ([]Listing, error) {
|
||||
var q struct {
|
||||
AllListedTokens struct {
|
||||
CollectionIds []string `json:"collection_ids"`
|
||||
Limit int `json:"limit"`
|
||||
StartAfter string `json:"start_after"`
|
||||
} `json:"all_listed_tokens"`
|
||||
}
|
||||
q.AllListedTokens.CollectionIds = collectionIds
|
||||
q.AllListedTokens.Limit = limit
|
||||
q.AllListedTokens.StartAfter = startAfter
|
||||
var r struct {
|
||||
Listings []struct {
|
||||
Owner string `json:"owner"`
|
||||
TokenId string `json:"token_id"`
|
||||
Ask struct {
|
||||
Denom string `json:"denom"`
|
||||
Amount decimal.Decimal `json:"amount"`
|
||||
} `json:"ask"`
|
||||
BlockCreated int64 `json:"block_created"`
|
||||
BlockExpires int64 `json:"block_expires"`
|
||||
} `json:"listings"`
|
||||
}
|
||||
|
||||
err := m.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "querying store")
|
||||
}
|
||||
var res []Listing
|
||||
for _, listing := range r.Listings {
|
||||
token := terra.NativeTokenFromDenom(listing.Ask.Denom)
|
||||
res = append(res, Listing{
|
||||
Owner: listing.Owner,
|
||||
TokenId: listing.TokenId,
|
||||
AskToken: token,
|
||||
Price: token.ValueFromTerra(listing.Ask.Amount),
|
||||
BlockCreated: listing.BlockCreated,
|
||||
BlockExpires: listing.BlockExpires,
|
||||
})
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (m *Market) ListedTokensByUser(ctx context.Context, address cosmos.AccAddress) ([]string, error) {
|
||||
var res []string
|
||||
startAfter := ""
|
||||
for {
|
||||
tmp, err := m.listedTokensByUserPage(ctx, address, startAfter)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "getting page with startafter %s", startAfter)
|
||||
}
|
||||
if len(tmp) == 0 {
|
||||
break
|
||||
}
|
||||
res = append(res, tmp...)
|
||||
startAfter = tmp[len(tmp)-1]
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (m *Market) listedTokensByUserPage(ctx context.Context, address cosmos.AccAddress, startAfter string) ([]string, error) {
|
||||
var q struct {
|
||||
ListedTokens struct {
|
||||
Owner string `json:"owner"`
|
||||
StartAfter string `json:"start_after"`
|
||||
} `json:"listed_tokens"`
|
||||
}
|
||||
q.ListedTokens.Owner = address.String()
|
||||
q.ListedTokens.StartAfter = startAfter
|
||||
var r struct {
|
||||
Tokens []string `json:"tokens"`
|
||||
}
|
||||
err := m.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "querying store")
|
||||
}
|
||||
return r.Tokens, nil
|
||||
}
|
||||
|
||||
func (m *Market) TokensByUser(ctx context.Context, address cosmos.AccAddress) ([]string, error) {
|
||||
var res []string
|
||||
startAfter := ""
|
||||
for {
|
||||
tmp, err := m.tokensByUserPage(ctx, address, 30, startAfter)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "getting page with startafter %s", startAfter)
|
||||
}
|
||||
if len(tmp) == 0 {
|
||||
break
|
||||
}
|
||||
res = append(res, tmp...)
|
||||
startAfter = tmp[len(tmp)-1]
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (m *Market) tokensByUserPage(ctx context.Context, address cosmos.AccAddress, limit int, startAfter string) ([]string, error) {
|
||||
var q struct {
|
||||
Tokens struct {
|
||||
Owner string `json:"owner"`
|
||||
Limit int `json:"limit"`
|
||||
StartAfter string `json:"start_after"`
|
||||
} `json:"tokens"`
|
||||
}
|
||||
q.Tokens.Owner = address.String()
|
||||
q.Tokens.Limit = limit
|
||||
q.Tokens.StartAfter = startAfter
|
||||
var r struct {
|
||||
Tokens []string `json:"tokens"`
|
||||
}
|
||||
err := m.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "querying store")
|
||||
}
|
||||
return r.Tokens, nil
|
||||
}
|
||||
|
||||
func (m *Market) NewCancelTokenListingMessage(sender cosmos.AccAddress, tokenId string) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
CancelTokenListing struct {
|
||||
TokenId string `json:"token_id"`
|
||||
} `json:"cancel_token_listing"`
|
||||
}
|
||||
q.CancelTokenListing.TokenId = tokenId
|
||||
return m.NewMsgExecuteContract(sender, q)
|
||||
}
|
||||
|
||||
func (m *Market) NewListTokenMessage(sender cosmos.AccAddress, tokenId string, AskToken terra.NativeToken, AskPrice decimal.Decimal, BlocksToListFor int64) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
ListToken struct {
|
||||
TokenId string `json:"token_id"`
|
||||
Ask struct {
|
||||
Denom string `json:"denom"`
|
||||
Amount decimal.Decimal `json:"amount"`
|
||||
} `json:"ask"`
|
||||
BlocksToListFor int64 `json:"blocks_to_list_for"`
|
||||
} `json:"list_token"`
|
||||
}
|
||||
q.ListToken.TokenId = tokenId
|
||||
q.ListToken.Ask.Denom = AskToken.Denom()
|
||||
q.ListToken.Ask.Amount = AskToken.ValueToTerra(AskPrice)
|
||||
q.ListToken.BlocksToListFor = BlocksToListFor
|
||||
return m.NewMsgExecuteContract(sender, q)
|
||||
}
|
||||
|
||||
func (m *Market) NewBuyTokenMessage(sender cosmos.AccAddress, tokenId string, token terra.NativeToken, price decimal.Decimal) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
BuyToken struct {
|
||||
TokenId string `json:"token_id"`
|
||||
} `json:"buy_token"`
|
||||
}
|
||||
q.BuyToken.TokenId = tokenId
|
||||
return token.NewMsgSendExecute(sender, m.Contract, price, q)
|
||||
}
|
32
protocols/galacticpunks/staking.go
Normal file
32
protocols/galacticpunks/staking.go
Normal file
@ -0,0 +1,32 @@
|
||||
package galacticpunks
|
||||
|
||||
import (
|
||||
"github.com/galacticship/terra"
|
||||
"github.com/galacticship/terra/cosmos"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type Staking struct {
|
||||
*terra.Contract
|
||||
}
|
||||
|
||||
func NewStaking(querier *terra.Querier) (*Staking, error) {
|
||||
contract, err := terra.NewContract(querier, "terra10t4pgfs6s3qeykqgfq9r74s89jmu7zx5gfkga5")
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init contract object")
|
||||
}
|
||||
|
||||
return &Staking{
|
||||
Contract: contract,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Staking) NewWithdrawRewardsMessage(sender cosmos.AccAddress, tokenId string) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
WithdrawRewards struct {
|
||||
TokenId string `json:"token_id"`
|
||||
} `json:"withdraw_rewards"`
|
||||
}
|
||||
q.WithdrawRewards.TokenId = tokenId
|
||||
return s.NewMsgExecuteContract(sender, q)
|
||||
}
|
39
protocols/luart/staking.go
Normal file
39
protocols/luart/staking.go
Normal file
@ -0,0 +1,39 @@
|
||||
package luart
|
||||
|
||||
import (
|
||||
"github.com/galacticship/terra"
|
||||
"github.com/galacticship/terra/cosmos"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type Staking struct {
|
||||
*terra.Contract
|
||||
}
|
||||
|
||||
func NewStaking(querier *terra.Querier) (*Staking, error) {
|
||||
c, err := terra.NewContract(querier, "terra1dlcwvsy6t7skge7s2dtdvr75lakltwr3xk9j2d")
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init base contract")
|
||||
}
|
||||
return &Staking{
|
||||
c,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Staking) NewBondMessage(sender cosmos.AccAddress, amount decimal.Decimal) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
Bond struct{} `json:"bond"`
|
||||
}
|
||||
return terra.LUART.NewMsgSendExecute(sender, s.Contract, amount, q)
|
||||
}
|
||||
|
||||
func (s *Staking) NewSubmitToUnbondMessage(sender cosmos.AccAddress, amount decimal.Decimal) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
SubmitToUnbond struct {
|
||||
Amount decimal.Decimal `json:"amount"`
|
||||
} `json:"submit_to_unbond"`
|
||||
}
|
||||
q.SubmitToUnbond.Amount = terra.LUART.ValueToTerra(amount)
|
||||
return s.NewMsgExecuteContract(sender, q)
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package mars
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/galacticship/terra"
|
||||
"github.com/galacticship/terra/cosmos"
|
||||
"github.com/pkg/errors"
|
||||
@ -27,3 +29,27 @@ func (g *Governance) NewStakeMessage(sender cosmos.AccAddress, amount decimal.De
|
||||
}
|
||||
return terra.MARS.NewMsgSendExecute(sender, g.Contract, amount, q)
|
||||
}
|
||||
|
||||
func (g *Governance) XMARSperMARS(ctx context.Context) (decimal.Decimal, error) {
|
||||
var q struct {
|
||||
XMarsPerMars struct{} `json:"x_mars_per_mars"`
|
||||
}
|
||||
var r decimal.Decimal
|
||||
err := g.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return decimal.Zero, errors.Wrap(err, "querying contract store")
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func (g *Governance) MARSperXMARS(ctx context.Context) (decimal.Decimal, error) {
|
||||
var q struct {
|
||||
MarsPerXMars struct{} `json:"mars_per_x_mars"`
|
||||
}
|
||||
var r decimal.Decimal
|
||||
err := g.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return decimal.Zero, errors.Wrap(err, "querying contract store")
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
@ -40,6 +40,23 @@ func (f *Farm) WithdrawableRewards(ctx context.Context, address cosmos.AccAddres
|
||||
return terra.PRISM.ValueFromTerra(r.Withdrawable), nil
|
||||
}
|
||||
|
||||
func (f *Farm) BondAmount(ctx context.Context, address cosmos.AccAddress) (decimal.Decimal, error) {
|
||||
var q struct {
|
||||
RewardInfo struct {
|
||||
StakerAddr string `json:"staker_addr"`
|
||||
} `json:"reward_info"`
|
||||
}
|
||||
q.RewardInfo.StakerAddr = address.String()
|
||||
var r struct {
|
||||
BondAmount decimal.Decimal `json:"bond_amount"`
|
||||
}
|
||||
err := f.QueryStore(ctx, q, &r)
|
||||
if err != nil {
|
||||
return decimal.Zero, errors.Wrap(err, "querying contract store")
|
||||
}
|
||||
return terra.YLUNA.ValueFromTerra(r.BondAmount), nil
|
||||
}
|
||||
|
||||
func (f *Farm) NewBondMessage(sender cosmos.AccAddress, amount decimal.Decimal) (cosmos.Msg, error) {
|
||||
var q struct {
|
||||
Bond struct{} `json:"bond"`
|
||||
|
@ -183,6 +183,10 @@ func NewRouter(querier *terra.Querier) (terra.Router, error) {
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init NLUNAPSI pair")
|
||||
}
|
||||
XASTROASTRO, err := NewPair(querier, "terra14q2h9nce4spj8n74g6kppj3yf86qx8hsrqngfh", terra.XASTRO, terra.ASTRO, terra.TERRASWAP_XASTROASTROLP)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "init NLUNAPSI pair")
|
||||
}
|
||||
|
||||
r.SetPairs(
|
||||
LUNAUST,
|
||||
@ -227,6 +231,7 @@ func NewRouter(querier *terra.Querier) (terra.Router, error) {
|
||||
WHSDUST,
|
||||
PRISMUST,
|
||||
NLUNAPSI,
|
||||
XASTROASTRO,
|
||||
)
|
||||
|
||||
return &Router{r}, nil
|
||||
|
30
tokens.go
30
tokens.go
@ -14,7 +14,6 @@ var (
|
||||
PRISM, _ = NewCw20Token("terra1dh9478k2qvqhqeajhn75a2a7dsnf74y5ukregw", "PRISM", 6)
|
||||
CLUNA, _ = NewCw20Token("terra13zaagrrrxj47qjwczsczujlvnnntde7fdt0mau", "cLUNA", 6)
|
||||
ASTRO, _ = NewCw20Token("terra1xj49zyqrwpv5k928jwfpfy2ha668nwdgkwlrg3", "ASTRO", 6)
|
||||
XASTRO, _ = NewCw20Token("terra1f68wt2ch3cx2g62dxtc8v68mkdh5wchdgdjwz7", "xASTRO", 6)
|
||||
APOLLO, _ = NewCw20Token("terra100yeqvww74h4yaejj6h733thgcafdaukjtw397", "APOLLO", 6)
|
||||
ANC, _ = NewCw20Token("terra14z56l0fp2lsf86zy3hty2z47ezkhnthtr9yq76", "ANC", 6)
|
||||
BLUNA, _ = NewCw20Token("terra1kc87mu460fwkqte29rquh4hc20m54fxwtsx7gp", "bLUNA", 6)
|
||||
@ -51,19 +50,27 @@ var (
|
||||
ROBO, _ = NewCw20Token("terra1f62tqesptvmhtzr8sudru00gsdtdz24srgm7wp", "ROBO", 6)
|
||||
XSD, _ = NewCw20Token("terra1ln2z938phz0nc2wepxpzfkwp6ezn9yrz9zv9ep", "XSD", 8)
|
||||
WHSD, _ = NewCw20Token("terra1ustvnmngueq0p4jd7gfnutgvdc6ujpsjhsjd02", "WHSD", 8)
|
||||
XASTRO, _ = NewCw20Token("terra14lpnyzc9z4g3ugr4lhm8s4nle0tq8vcltkhzh7", "xASTRO", 6)
|
||||
XMARS, _ = NewCw20Token("terra1a04v570f9cxp49mk06vjsm8axsswndpwwt67k4", "xMARS", 6)
|
||||
KUST, _ = NewCw20Token("terra1g53pyke8jtmt4lwvk4yl0xaqc4u0qlsl8dz3ex", "kUST", 6)
|
||||
)
|
||||
|
||||
var (
|
||||
ASTRO_LUNAUSTLP, _ = NewCw20Token("terra1m24f7k4g66gnh9f7uncp32p722v0kyt3q4l3u5", "uLP", 6)
|
||||
ASTRO_BLUNAUSTLP, _ = NewCw20Token("terra1aaqmlv4ajsg9043zrhsd44lk8dqnv2hnakjv97", "uLP", 6)
|
||||
ASTRO_ANCUSTLP, _ = NewCw20Token("terra1wmaty65yt7mjw6fjfymkd9zsm6atsq82d9arcd", "uLP", 6)
|
||||
ASTRO_MIRUSTLP, _ = NewCw20Token("terra17trxzqjetl0q6xxep0s2w743dhw2cay0x47puc", "uLP", 6)
|
||||
ASTRO_MINEUSTLP, _ = NewCw20Token("terra16unvjel8vvtanxjpw49ehvga5qjlstn8c826qe", "uLP", 6)
|
||||
ASTRO_SKUJIKUJILP, _ = NewCw20Token("terra1kp4n4tms5w4tvvypya7589zswssqqahtjxy6da", "uLP", 6)
|
||||
ASTRO_MARSUSTLP, _ = NewCw20Token("terra1ww6sqvfgmktp0afcmvg78st6z89x5zr3tmvpss", "uLP", 6)
|
||||
ASTRO_ASTROUSTLP, _ = NewCw20Token("terra17n5sunn88hpy965mzvt3079fqx3rttnplg779g", "uLP", 6)
|
||||
ASTRO_ASTROLUNALP, _ = NewCw20Token("terra1ryxkslm6p04q0nl046quwz8ctdd5llkjnaccpa", "uLP", 6)
|
||||
ASTRO_LUNABLUNALP, _ = NewCw20Token("terra1htw7hm40ch0hacm8qpgd24sus4h0tq3hsseatl", "uLP", 6)
|
||||
ASTRO_LUNAUSTLP, _ = NewCw20Token("terra1m24f7k4g66gnh9f7uncp32p722v0kyt3q4l3u5", "uLP", 6)
|
||||
ASTRO_BLUNAUSTLP, _ = NewCw20Token("terra1aaqmlv4ajsg9043zrhsd44lk8dqnv2hnakjv97", "uLP", 6)
|
||||
ASTRO_ANCUSTLP, _ = NewCw20Token("terra1wmaty65yt7mjw6fjfymkd9zsm6atsq82d9arcd", "uLP", 6)
|
||||
ASTRO_MIRUSTLP, _ = NewCw20Token("terra17trxzqjetl0q6xxep0s2w743dhw2cay0x47puc", "uLP", 6)
|
||||
ASTRO_MINEUSTLP, _ = NewCw20Token("terra16unvjel8vvtanxjpw49ehvga5qjlstn8c826qe", "uLP", 6)
|
||||
ASTRO_SKUJIKUJILP, _ = NewCw20Token("terra1kp4n4tms5w4tvvypya7589zswssqqahtjxy6da", "uLP", 6)
|
||||
ASTRO_MARSUSTLP, _ = NewCw20Token("terra1ww6sqvfgmktp0afcmvg78st6z89x5zr3tmvpss", "uLP", 6)
|
||||
ASTRO_ASTROUSTLP, _ = NewCw20Token("terra17n5sunn88hpy965mzvt3079fqx3rttnplg779g", "uLP", 6)
|
||||
ASTRO_ASTROLUNALP, _ = NewCw20Token("terra1ryxkslm6p04q0nl046quwz8ctdd5llkjnaccpa", "uLP", 6)
|
||||
ASTRO_LUNABLUNALP, _ = NewCw20Token("terra1htw7hm40ch0hacm8qpgd24sus4h0tq3hsseatl", "uLP", 6)
|
||||
ASTRO_MARSXMARSLP, _ = NewCw20Token("terra1cxmdyn5srv8uwvhgz5ckqf28zf8c7uwyz08f2j", "uLP", 6)
|
||||
ASTRO_KUSTUSTLP, _ = NewCw20Token("terra16aurvlp5xctv0ftcelaseypyc89ylf4y0s5q0y", "uLP", 6)
|
||||
ASTRO_PRISMUSTLP, _ = NewCw20Token("terra156sdvmjkezv5yxpgcxug0s73zkvdqk72pldkva", "uLP", 6)
|
||||
ASTRO_PRISMXPRISMLP, _ = NewCw20Token("terra198en0xuzldzyark7pqz409p3u2d2g3y3k8u3py", "uLP", 6)
|
||||
ASTRO_YLUNALUNALP, _ = NewCw20Token("terra12kf0s56pz2xhus9cqs4wva2xgz8wdkuqmh396s", "uLP", 6)
|
||||
|
||||
TERRASWAP_LUNAUSTLP, _ = NewCw20Token("terra17dkr9rnmtmu7x4azrpupukvur2crnptyfvsrvr", "uLP", 6)
|
||||
TERRASWAP_BLUNALUNALP, _ = NewCw20Token("terra1nuy34nwnsh53ygpc4xprlj263cztw7vc99leh2", "uLP", 6)
|
||||
@ -107,6 +114,7 @@ var (
|
||||
TERRASWAP_XSDWHSDLP, _ = NewCw20Token("terra1z0vaks4wkehncztu2a3j2z4fj2gjsnyk2ng9xu", "uLP", 6)
|
||||
TERRASWAP_WHSDUSTLP, _ = NewCw20Token("terra13m7t5z9zvx2phtpa0k6lxht3qtjjhj68u0t0jz", "uLP", 6)
|
||||
TERRASWAP_NLUNAPSILP, _ = NewCw20Token("terra1tuw46dwfvahpcwf3ulempzsn9a0vhazut87zec", "uLP", 6)
|
||||
TERRASWAP_XASTROASTROLP, _ = NewCw20Token("terra1h5egnh0uu4qcjx359fgr5jfytjsazsynhm7lw7", "uLP", 6)
|
||||
|
||||
PRISM_PRISMUSTLP, _ = NewCw20Token("terra1wkv9htanake4yerrrjz8p5n40lyrjg9md28tg3", "uLP", 6)
|
||||
PRISM_PRISMLUNALP, _ = NewCw20Token("terra1af7hyx4ek8vqr8asmtujsyv7s3z6py3jgtsgh8", "uLP", 6)
|
||||
|
Loading…
x
Reference in New Issue
Block a user