Skip to content

Commit f1a6b24

Browse files
Merge pull request #255 from klever-io/refactor/kos-go
Refactor/kos-go
2 parents 06507fc + 6667b07 commit f1a6b24

8 files changed

Lines changed: 1048 additions & 201 deletions

File tree

packages/kos-go/demo/main.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@ import (
44
"encoding/hex"
55
"fmt"
66

7-
"github.com/klever-io/kos-rs/packages/kos-go/kos_mobile"
7+
kosgo "github.com/klever-io/kos-rs/packages/kos-go"
88
)
99

1010
func main() {
1111
chainID := uint32(18) // BCH
1212

13-
walletOptions := kos_mobile.WalletOptions{
14-
UseLegacyPath: false,
15-
Specific: nil,
16-
}
17-
account, err := kos_mobile.GenerateWalletFromMnemonic(
13+
walletOptions := kosgo.NewWalletOptions(false)
14+
account, err := kosgo.GenerateWalletFromMnemonic(
1815
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
1916
chainID,
2017
0,
@@ -27,16 +24,20 @@ func main() {
2724

2825
rawTx := "0100000002afa8838dbaa03cd3e4fee38bdcb6a428965559ae941dca5a8f91999cfd6d8b0d0100000000ffffffffdb6d60d4a93a95738e72f641bcdd166c94f6e1f439dfe695e40583997284463c0100000000ffffffff0240420f00000000001976a91434bf902df5d66f0e9b89d0f83fbcad638ad19ae988acea970700000000001976a9145bb0ba5ba58cdab459f27f2d29f40e1dd5db238188ac00000000"
2926

30-
prevScript1, _ := hex.DecodeString("76a9145bb0ba5ba58cdab459f27f2d29f40e1dd5db238188ac")
31-
prevScript2, _ := hex.DecodeString("76a9145bb0ba5ba58cdab459f27f2d29f40e1dd5db238188ac")
32-
33-
var options kos_mobile.TransactionChainOptions = kos_mobile.TransactionChainOptions(kos_mobile.TransactionChainOptionsBtc{
27+
prevScript, err := hex.DecodeString("76a9145bb0ba5ba58cdab459f27f2d29f40e1dd5db238188ac")
28+
if err != nil {
29+
fmt.Printf("failed to decode prevScript: %v\n", err)
30+
return
31+
}
32+
options := kosgo.TransactionChainOptionsBtc{
33+
PrevScripts: [][]byte{prevScript, prevScript},
3434
InputAmounts: []uint64{498870, 1001016},
35-
PrevScripts: [][]byte{prevScript1, prevScript2},
36-
})
37-
transaction, err := kos_mobile.SignTransaction(account, rawTx, &options)
35+
}
36+
37+
transaction, err := kosgo.SignTransaction(account, rawTx, options)
3838
if err != nil {
39-
fmt.Printf("failed to sign transaction: %v", err)
39+
fmt.Printf("failed to sign transaction: %v\n", err)
40+
return
4041
}
4142

4243
expectedRaw :=

packages/kos-go/models.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package kosgo
2+
3+
import kos_mobile "github.com/klever-io/kos-rs/packages/kos-go/kos_mobile"
4+
5+
type TransactionChainOptions = kos_mobile.TransactionChainOptions
6+
type TransactionChainOptionsEvm = kos_mobile.TransactionChainOptionsEvm
7+
type TransactionChainOptionsBtc = kos_mobile.TransactionChainOptionsBtc
8+
type TransactionChainOptionsSubstrate = kos_mobile.TransactionChainOptionsSubstrate
9+
type TransactionChainOptionsCosmos = kos_mobile.TransactionChainOptionsCosmos
10+
11+
type WalletChainOptions = kos_mobile.WalletChainOptions
12+
type WalletChainOptionsCustomEth = kos_mobile.WalletChainOptionsCustomEth
13+
type WalletChainOptionsCustomIcp = kos_mobile.WalletChainOptionsCustomIcp
14+
15+
type WalletOptions = kos_mobile.WalletOptions
16+
17+
func NewSubstrateTransactionOptions(
18+
call string,
19+
era string,
20+
nonce uint32,
21+
tip uint64,
22+
assetId *string,
23+
blockHash string,
24+
genesisHash string,
25+
specVersion uint32,
26+
transactionVersion uint32,
27+
appId *uint32,
28+
signedExtensions *[]string,
29+
) TransactionChainOptions {
30+
return kos_mobile.NewSubstrateTransactionOptions(
31+
call, era, nonce, tip, assetId,
32+
blockHash, genesisHash,
33+
specVersion, transactionVersion,
34+
appId, signedExtensions,
35+
)
36+
}
37+
38+
func NewBitcoinTransactionOptions(inputAmounts []uint64, prevScripts []string) TransactionChainOptions {
39+
return kos_mobile.NewBitcoinTransactionOptions(inputAmounts, prevScripts)
40+
}
41+
42+
func NewEvmTransactionOptions(chainId uint32) TransactionChainOptions {
43+
return kos_mobile.NewEvmTransactionOptions(chainId)
44+
}
45+
46+
func NewCosmosTransactionOptions(chainId string, accountNumber uint64) TransactionChainOptions {
47+
return kos_mobile.NewCosmosTransactionOptions(chainId, accountNumber)
48+
}
49+
50+
func NewWalletOptions(useLegacyPath bool) WalletOptions {
51+
return kos_mobile.NewWalletOptions(useLegacyPath)
52+
}
53+
54+
func NewEthWalletOptions(useLegacyPath bool, chainId uint32) WalletOptions {
55+
return kos_mobile.NewEthWalletOptions(useLegacyPath, chainId)
56+
}
57+
58+
func NewIcpWalletOptions(useLegacyPath bool, keyType string) WalletOptions {
59+
return kos_mobile.NewIcpWalletOptions(useLegacyPath, keyType)
60+
}

packages/kos-go/number.go

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
package kosgo
2+
3+
import (
4+
"fmt"
5+
6+
kos_mobile "github.com/klever-io/kos-rs/packages/kos-go/kos_mobile"
7+
)
8+
9+
type Sign = kos_mobile.Sign
10+
11+
const (
12+
Minus = kos_mobile.SignMinus
13+
NoSign = kos_mobile.SignNoSign
14+
Plus = kos_mobile.SignPlus
15+
)
16+
17+
type BigNumber struct {
18+
inner kos_mobile.BigNumber
19+
}
20+
21+
func NewBigNumber(value string) (*BigNumber, error) {
22+
bn, err := kos_mobile.BigNumberNew(value)
23+
if err != nil {
24+
return nil, fmt.Errorf("invalid number: %w", err)
25+
}
26+
return &BigNumber{inner: bn}, nil
27+
}
28+
29+
func NewBigNumberZero() *BigNumber {
30+
return &BigNumber{inner: kos_mobile.BigNumberNewZero()}
31+
}
32+
33+
func (b *BigNumber) String() string {
34+
if b == nil {
35+
return ""
36+
}
37+
return kos_mobile.BigNumberString(b.inner)
38+
}
39+
40+
func Add(lhs, rhs *BigNumber) (*BigNumber, error) {
41+
if lhs == nil || rhs == nil {
42+
return nil, fmt.Errorf("nil BigNumber operand")
43+
}
44+
result, err := kos_mobile.BigNumberAdd(lhs.inner, rhs.inner)
45+
if err != nil {
46+
return nil, err
47+
}
48+
return &BigNumber{inner: result}, nil
49+
}
50+
51+
func Sub(lhs, rhs *BigNumber) (*BigNumber, error) {
52+
if lhs == nil || rhs == nil {
53+
return nil, fmt.Errorf("nil BigNumber operand")
54+
}
55+
result, err := kos_mobile.BigNumberSubtract(lhs.inner, rhs.inner)
56+
if err != nil {
57+
return nil, err
58+
}
59+
return &BigNumber{inner: result}, nil
60+
}
61+
62+
func Mul(lhs, rhs *BigNumber) (*BigNumber, error) {
63+
if lhs == nil || rhs == nil {
64+
return nil, fmt.Errorf("nil BigNumber operand")
65+
}
66+
result, err := kos_mobile.BigNumberMultiply(lhs.inner, rhs.inner)
67+
if err != nil {
68+
return nil, err
69+
}
70+
return &BigNumber{inner: result}, nil
71+
}
72+
73+
func Div(lhs, rhs *BigNumber) (*BigNumber, error) {
74+
if lhs == nil || rhs == nil {
75+
return nil, fmt.Errorf("nil BigNumber operand")
76+
}
77+
result, err := kos_mobile.BigNumberDivide(lhs.inner, rhs.inner)
78+
if err != nil {
79+
return nil, err
80+
}
81+
return &BigNumber{inner: result}, nil
82+
}
83+
84+
func Pow(base, exp *BigNumber) (*BigNumber, error) {
85+
if base == nil || exp == nil {
86+
return nil, fmt.Errorf("nil BigNumber operand")
87+
}
88+
result, err := kos_mobile.BigNumberPow(base.inner, exp.inner)
89+
if err != nil {
90+
return nil, err
91+
}
92+
return &BigNumber{inner: result}, nil
93+
}
94+
95+
func IsEqual(lhs, rhs *BigNumber) bool {
96+
if lhs == nil || rhs == nil {
97+
return false
98+
}
99+
return kos_mobile.BigNumberIsEqual(lhs.inner, rhs.inner)
100+
}
101+
102+
func IsGt(lhs, rhs *BigNumber) bool {
103+
if lhs == nil || rhs == nil {
104+
return false
105+
}
106+
return kos_mobile.BigNumberIsGt(lhs.inner, rhs.inner)
107+
}
108+
109+
func IsGte(lhs, rhs *BigNumber) bool {
110+
if lhs == nil || rhs == nil {
111+
return false
112+
}
113+
return kos_mobile.BigNumberIsGte(lhs.inner, rhs.inner)
114+
}
115+
116+
func IsLt(lhs, rhs *BigNumber) bool {
117+
if lhs == nil || rhs == nil {
118+
return false
119+
}
120+
return kos_mobile.BigNumberIsLt(lhs.inner, rhs.inner)
121+
}
122+
123+
func IsLte(lhs, rhs *BigNumber) bool {
124+
if lhs == nil || rhs == nil {
125+
return false
126+
}
127+
return kos_mobile.BigNumberIsLte(lhs.inner, rhs.inner)
128+
}
129+
130+
func Abs(b *BigNumber) (*BigNumber, error) {
131+
if b == nil {
132+
return nil, fmt.Errorf("nil BigNumber operand")
133+
}
134+
result, err := kos_mobile.BigNumberAbsolute(b.inner)
135+
if err != nil {
136+
return nil, err
137+
}
138+
return &BigNumber{inner: result}, nil
139+
}
140+
141+
func IsZero(b *BigNumber) bool {
142+
if b == nil {
143+
return false
144+
}
145+
return kos_mobile.BigNumberIsZero(b.inner)
146+
}
147+
148+
func Increment(b *BigNumber) (*BigNumber, error) {
149+
if b == nil {
150+
return nil, fmt.Errorf("nil BigNumber operand")
151+
}
152+
result, err := kos_mobile.BigNumberIncrement(b.inner)
153+
if err != nil {
154+
return nil, err
155+
}
156+
return &BigNumber{inner: result}, nil
157+
}
158+
159+
func Decrement(b *BigNumber) (*BigNumber, error) {
160+
if b == nil {
161+
return nil, fmt.Errorf("nil BigNumber operand")
162+
}
163+
result, err := kos_mobile.BigNumberDecrement(b.inner)
164+
if err != nil {
165+
return nil, err
166+
}
167+
return &BigNumber{inner: result}, nil
168+
}
169+
170+
func IsPositive(b *BigNumber) bool {
171+
if b == nil {
172+
return false
173+
}
174+
return kos_mobile.BigNumberIsPositive(b.inner)
175+
}
176+
177+
func IsNegative(b *BigNumber) bool {
178+
if b == nil {
179+
return false
180+
}
181+
return kos_mobile.BigNumberIsNegative(b.inner)
182+
}

0 commit comments

Comments
 (0)