diff --git a/les/api.go b/les/api.go index b30d3a38a8..4efd2ed6ac 100644 --- a/les/api.go +++ b/les/api.go @@ -453,13 +453,66 @@ func (api *PrivateLespayAPI) Connection(ctx context.Context, remote bool, node s params := tsConnectionParams{requestedCapacity, stayConnected, paymentModule, setCap} enc, _ := rlp.EncodeToBytes(¶ms) var resEnc []byte - fmt.Println("makeCall", remote, node, enc) resEnc, err = api.makeCall(ctx, remote, node, append([]byte{tsConnection}, enc...)) if err != nil { - fmt.Println("makeCall err", err) return } err = rlp.DecodeBytes(resEnc, &results) - fmt.Println("decode err", err) + return +} + +func (api *PrivateLespayAPI) Deposit(ctx context.Context, remote bool, node string, paymentModule string, proofOfPayment []byte) (results tsDepositResults, err error) { + params := tsDepositParams{paymentModule, proofOfPayment} + enc, _ := rlp.EncodeToBytes(¶ms) + var resEnc []byte + resEnc, err = api.makeCall(ctx, remote, node, append([]byte{tsDeposit}, enc...)) + if err != nil { + return + } + err = rlp.DecodeBytes(resEnc, &results) + return +} + +func (api *PrivateLespayAPI) BuyTokens(ctx context.Context, remote bool, node string, maxSpend, minReceive uint64, spendAll bool) (results tsBuyTokensResults, err error) { + params := tsBuyTokensParams{maxSpend, minReceive, spendAll} + enc, _ := rlp.EncodeToBytes(¶ms) + var resEnc []byte + resEnc, err = api.makeCall(ctx, remote, node, append([]byte{tsBuyTokens}, enc...)) + if err != nil { + return + } + err = rlp.DecodeBytes(resEnc, &results) + return +} + +func (api *PrivateLespayAPI) GetBalance(ctx context.Context, remote bool, node string) (results tsGetBalanceResults, err error) { + var resEnc []byte + resEnc, err = api.makeCall(ctx, remote, node, []byte{tsGetBalance}) + if err != nil { + return + } + err = rlp.DecodeBytes(resEnc, &results) + return +} + +func (api *PrivateLespayAPI) Info(ctx context.Context, remote bool, node string) (results tsInfoResults, err error) { + var resEnc []byte + resEnc, err = api.makeCall(ctx, remote, node, []byte{tsInfo}) + if err != nil { + return + } + err = rlp.DecodeBytes(resEnc, &results) + return +} + +func (api *PrivateLespayAPI) ReceiverInfo(ctx context.Context, remote bool, node string, receiverIDs []string) (results tsReceiverInfoResults, err error) { + params := tsReceiverInfoParams(receiverIDs) + enc, _ := rlp.EncodeToBytes(¶ms) + var resEnc []byte + resEnc, err = api.makeCall(ctx, remote, node, append([]byte{tsReceiverInfo}, enc...)) + if err != nil { + return + } + err = rlp.DecodeBytes(resEnc, &results) return } diff --git a/les/tokensale.go b/les/tokensale.go index 9179b948f4..dda97ac4a4 100644 --- a/les/tokensale.go +++ b/les/tokensale.go @@ -363,6 +363,19 @@ func (t *tokenSale) buyTokens(id enode.ID, maxSpend, minReceive uint64, spendAll return } +func (t *tokenSale) getBalance(id enode.ID) (pcBalance, tokenBalance uint64) { + t.lock.Lock() + defer t.lock.Unlock() + + pb := t.clientPool.getPosBalance(id) + tokenBalance = pb.value + var meta tokenSaleMeta + if err := rlp.DecodeBytes([]byte(pb.meta), &meta); err == nil { + pcBalance = meta.pcBalance + } + return +} + func (t *tokenSale) info() (version, compatible uint, info keyValueList, receivers []string) { t.lock.Lock() defer t.lock.Unlock() @@ -436,6 +449,7 @@ func (t *tokenSaleMeta) DecodeRLP(s *rlp.Stream) error { const ( tsInfo = iota tsReceiverInfo + tsGetBalance tsDeposit tsBuyTokens tsConnection @@ -449,7 +463,10 @@ type ( } tsReceiverInfoParams []string tsReceiverInfoResults []keyValueList - tsDepositParams struct { + tsGetBalanceResults struct { + PcBalance, TokenBalance uint64 + } + tsDepositParams struct { PaymentModule string ProofOfPayment []byte } @@ -495,6 +512,12 @@ func (t *tokenSale) runCommand(cmd []byte, id enode.ID, freeID string) []byte { results = t.receiverInfo(params) res, _ = rlp.EncodeToBytes(&results) } + case tsGetBalance: + var results tsGetBalanceResults + if len(cmd) == 1 { + results.PcBalance, results.TokenBalance = t.getBalance(id) + res, _ = rlp.EncodeToBytes(&results) + } case tsDeposit: var ( params tsDepositParams