Skip to content

Commit

Permalink
types: Update CurrencyID
Browse files Browse the repository at this point in the history
  • Loading branch information
cdamian committed Jun 8, 2023
1 parent 9417989 commit fd861c0
Showing 1 changed file with 92 additions and 23 deletions.
115 changes: 92 additions & 23 deletions types/sale.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@

package types

import "github.com/centrifuge/go-substrate-rpc-client/v4/scale"
import (
"errors"

"github.com/centrifuge/go-substrate-rpc-client/v4/scale"
)

type Tranche struct {
FirstVal U64
Expand Down Expand Up @@ -51,20 +55,73 @@ func (p *PermissionedCurrency) Encode(_ scale.Encoder) error {
return nil
}

// pub enum CurrencyId {
// // The Native token, representing AIR in Altair and CFG in Centrifuge.
// #[default]
// Native,
//
// // A Tranche token
// Tranche(PoolId, TrancheId),
//
// /// Karura KSM
// KSM,
//
// /// Acala Dollar
// /// In Altair, it represents AUSD in Kusama;
// /// In Centrifuge, it represents AUSD in Polkadot;
// AUSD,
//
// /// A foreign asset
// ForeignAsset(ForeignAssetId),
//
// /// A staking token
// Staking(StakingCurrency),
//}

type StakingCurrency struct {
IsBlockRewards bool
}

func (s *StakingCurrency) Decode(decoder scale.Decoder) error {
b, err := decoder.ReadOneByte()
if err != nil {
return err
}

switch b {
case 0:
s.IsBlockRewards = true

return nil
default:
return errors.New("unsupported staking currency")
}
}

func (s StakingCurrency) Encode(encoder scale.Encoder) error {
switch {
case s.IsBlockRewards:
return encoder.PushByte(0)
default:
return errors.New("unsupported staking currency")
}
}

type CurrencyID struct {
IsNative bool

IsUsd bool

IsTranche bool
Tranche Tranche

IsKSM bool

IsKUSD bool
IsAUSD bool

IsForeignAsset bool
AsForeignAsset U32

IsPermissioned bool
PermissionedCurrency PermissionedCurrency
IsStaking bool
AsStaking StakingCurrency
}

func (c *CurrencyID) Decode(decoder scale.Decoder) error {
Expand All @@ -76,50 +133,62 @@ func (c *CurrencyID) Decode(decoder scale.Decoder) error {
switch b {
case 0:
c.IsNative = true

return nil
case 1:
c.IsUsd = true
case 2:
c.IsTranche = true

return decoder.Decode(&c.Tranche)
case 3:
case 2:
c.IsKSM = true

return nil
case 3:
c.IsAUSD = true

return nil
case 4:
c.IsKUSD = true
c.IsForeignAsset = true

return decoder.Decode(&c.AsForeignAsset)
case 5:
c.IsPermissioned = true
c.IsStaking = true

return decoder.Decode(&c.PermissionedCurrency)
return decoder.Decode(&c.AsStaking)
default:
return errors.New("unsupported currency ID")
}

return nil
}

func (c CurrencyID) Encode(encoder scale.Encoder) error {
switch {
case c.IsNative:
return encoder.PushByte(0)
case c.IsUsd:
return encoder.PushByte(1)
case c.IsTranche:
if err := encoder.PushByte(2); err != nil {
if err := encoder.PushByte(1); err != nil {
return err
}

return encoder.Encode(c.Tranche)
case c.IsKSM:
return encoder.PushByte(2)
case c.IsAUSD:
return encoder.PushByte(3)
case c.IsKUSD:
return encoder.PushByte(4)
case c.IsPermissioned:
case c.IsForeignAsset:
if err := encoder.PushByte(4); err != nil {
return err
}

return encoder.Encode(c.AsForeignAsset)
case c.IsStaking:
if err := encoder.PushByte(5); err != nil {
return err
}

return encoder.Encode(c.PermissionedCurrency)
return encoder.Encode(c.AsStaking)
default:
return errors.New("unsupported currency ID")
}

return nil
}

type Price struct {
Expand Down

0 comments on commit fd861c0

Please sign in to comment.