Skip to content

Commit

Permalink
Merge pull request #36 from TRON-US/BTFS-1082
Browse files Browse the repository at this point in the history
BTFS-1082 move sample/demo from go-btfs to go-btfs-common
  • Loading branch information
taiyangc authored Dec 2, 2019
2 parents 54ad5cd + f3f1bd7 commit e02c5fa
Showing 1 changed file with 89 additions and 0 deletions.
89 changes: 89 additions & 0 deletions ledger/sample/demo.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package main

import (
"context"

"github.com/tron-us/go-btfs-common/crypto"
"github.com/tron-us/go-btfs-common/ledger"
"github.com/tron-us/go-common/v2/log"

"go.uber.org/zap"
)

const (
PayerPrivKeyString = "CAISIJFNZZd5ZSvi9OlJP/mz/vvUobvlrr2//QN4DzX/EShP"
ReceiverPrivKeyString = "CAISIDm/qF5f98Jh8FGBUcFUhQvJPU8uEah1SZrR1BrGekC0"
)

func main() {
ctx := context.Background()
// build connection with ledger
clientConn, err := ledger.LedgerConnection("ledger-dev.bt.co:443", "")
if err != nil {
log.Panic("fail to connect", zap.Error(err))
}
defer ledger.CloseConnection(clientConn)
// new ledger client
ledgerClient := ledger.NewClient(clientConn)
// create payer Account
payerPrivKey, err := crypto.ToPrivKey(PayerPrivKeyString)
if err != nil {
log.Panic("can not convert to private key", zap.Error(err))
}
payerPubKey := payerPrivKey.GetPublic()
_, err = ledger.ImportSignedAccount(ctx, payerPrivKey, payerPubKey, ledgerClient)
if err != nil {
log.Panic("can not create account on ledger", zap.Error(err))
}
// create receiver account
recvPrivKey, err := crypto.ToPrivKey(ReceiverPrivKeyString)
if err != nil {
log.Panic("can not convert to private key", zap.Error(err))
}
recvPubKey := recvPrivKey.GetPublic()
_, err = ledger.ImportSignedAccount(ctx, recvPrivKey, recvPubKey, ledgerClient)
if err != nil {
log.Panic("can not create account on ledger", zap.Error(err))
}
// prepare channel commit
amount := int64(1)
channelCommit, err := ledger.NewChannelCommit(payerPubKey, recvPubKey, amount)
if err != nil {
log.Panic("can not create channel commit", zap.Error(err))
}
// sign for the channel commit
fromSig, err := crypto.Sign(payerPrivKey, channelCommit)
if err != nil {
log.Panic("fail to sign channel commit", zap.Error(err))
}
// create channel: payer start the channel
channelID, err := ledger.CreateChannel(ctx, ledgerClient, channelCommit, fromSig)
if err != nil {
log.Panic("fail to create channel", zap.Error(err))
}
// channel state: transfer money from -> to
fromAcc, err := ledger.NewAccount(payerPubKey, 0)
if err != nil {
log.Panic("wrong account on channel", zap.Error(err))
}
toAcc, err := ledger.NewAccount(recvPubKey, amount)
if err != nil {
log.Panic("wrong account on channel", zap.Error(err))
}
channelState := ledger.NewChannelState(channelID, 1, fromAcc, toAcc)
// need permission from both account, get signature from both
fromSigState, err := crypto.Sign(payerPrivKey, channelState)
if err != nil {
log.Panic("error when signing the channel state", zap.Error(err))
}
toSigState, err := crypto.Sign(recvPrivKey, channelState)
if err != nil {
log.Panic("error when signing the channel state", zap.Error(err))
}
signedChannelState := ledger.NewSignedChannelState(channelState, fromSigState, toSigState)
// close channel
err = ledger.CloseChannel(ctx, ledgerClient, signedChannelState)
if err != nil {
log.Panic("fail to close channel", zap.Error(err))
}
}

0 comments on commit e02c5fa

Please sign in to comment.