Skip to content

Commit

Permalink
fix(solana): support string-based addresses in burn logs
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanswrt committed Jul 22, 2021
1 parent 43d3e71 commit 9fd745d
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 30 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ jobs:
runs-on: ubuntu-latest
env:
FILECOIN_FFI_COMMIT: 8b97bd8230b77bd32f4f27e4766a6d8a03b4e801
SOLANA_FFI_COMMIT: 1f85d47b5331a2146834bbd28a51654134aedd7d
SOLANA_FFI_COMMIT: 1428533377eb4ce00e81d04a53bad92f5339db00
services:
solana:
image: renbot/ren-solana:latest
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ require (
github.com/onsi/ginkgo v1.14.0
github.com/onsi/gomega v1.10.1
github.com/renproject/aw v0.4.1-0.20210604011747-50d6a643dc76
github.com/renproject/darknode v0.5.3-0.20210708063137-4d3b96c44e31
github.com/renproject/darknode v0.5.3-0.20210722061852-6c9ec26daa5b
github.com/renproject/id v0.4.2
github.com/renproject/kv v1.1.2
github.com/renproject/multichain v0.3.16
github.com/renproject/multichain v0.3.20
github.com/renproject/pack v0.2.11
github.com/renproject/phi v0.1.0
github.com/renproject/surge v1.2.6
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,8 @@ github.com/renproject/darknode v0.5.3-0.20210629111346-e4f394804f14 h1:VfqzKf/9P
github.com/renproject/darknode v0.5.3-0.20210629111346-e4f394804f14/go.mod h1:9I7UvwFCtMD1yTd7LcCLExv4kEPqO40KSypIlZsHfTI=
github.com/renproject/darknode v0.5.3-0.20210708063137-4d3b96c44e31 h1:cAxTtWK7gAuAUJ5jxqzPwUNgUbLFI6eFS7E1vR9XePA=
github.com/renproject/darknode v0.5.3-0.20210708063137-4d3b96c44e31/go.mod h1:9I7UvwFCtMD1yTd7LcCLExv4kEPqO40KSypIlZsHfTI=
github.com/renproject/darknode v0.5.3-0.20210722061852-6c9ec26daa5b h1:86dtkb6tveBCGqy5ITqOL6naqfHvfCWswXCqywnk22s=
github.com/renproject/darknode v0.5.3-0.20210722061852-6c9ec26daa5b/go.mod h1:OIWTAZmZG7OV5e6/t4Ppf/GWqTbZV8e5AlLhPabID8Q=
github.com/renproject/hyperdrive v0.4.8 h1:p66FEsHjkhn+PegvWzk21GYeHF5S4iHJiEs5DA+p7D0=
github.com/renproject/hyperdrive v0.4.8/go.mod h1:ck1cKJ0M95xwfO0vuEj7ifDjNVYFrPvat5INU70wbUc=
github.com/renproject/id v0.4.2 h1:XseNDPPCJtsZjIWR7Qgf+zxy0Gt5xsLrfwpQxJt5wFQ=
Expand All @@ -1620,6 +1622,8 @@ github.com/renproject/kv v1.1.2 h1:P18yHdDVJTEZ9yeyx6o82ICY1m6f+VdtAt/ouZez+AU=
github.com/renproject/kv v1.1.2/go.mod h1:78bvdAtYiYxCoT9ihVhl8qdmjl7s9fST/FkRLnZ6rXY=
github.com/renproject/multichain v0.3.16 h1:K7SO5lqiL1cowQpjXpIvQ7Ihjjy4sOGqtd1tGAdauHY=
github.com/renproject/multichain v0.3.16/go.mod h1:9And10nVkgnTDoaX2VbA8QyP3S2qFts0VrySalzoaAY=
github.com/renproject/multichain v0.3.20 h1:tQv2FYnDXF+BGZU8gNpzwlpUZSTxiyRyJXmE6mt/diQ=
github.com/renproject/multichain v0.3.20/go.mod h1:9And10nVkgnTDoaX2VbA8QyP3S2qFts0VrySalzoaAY=
github.com/renproject/pack v0.2.5/go.mod h1:pzX3Hc04RoPft89LaZJVp0xgngVGi90V7GvyC3mOGg4=
github.com/renproject/pack v0.2.11 h1:TtLh/jOqB3SDwjoMODcPnQuVbySbDK4g49NJ4BAh5/4=
github.com/renproject/pack v0.2.11/go.mod h1:pzX3Hc04RoPft89LaZJVp0xgngVGi90V7GvyC3mOGg4=
Expand Down
33 changes: 7 additions & 26 deletions watcher/watcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,15 +174,11 @@ func (fetcher SolFetcher) FetchBurnLogs(ctx context.Context, from uint64, to uin
return
}
data := accountInfo.Value.Data

if len(data) != 65 {
resultChan <- BurnLogResult{Error: fmt.Errorf("deserializing burn log data: expected data len 65, got %v", len(data))}
amount, recipient, err := solanastate.DecodeBurnLog(data)
if err != nil {
resultChan <- BurnLogResult{Error: fmt.Errorf("failed to decode burn log : %v", err)}
return
}
amount := [32]byte{}
copy(amount[:], data[0:32])
recipientLen := uint8(data[32:33][0])
recipient := multichain.RawAddress(data[33 : 33+int(recipientLen)])

signatures, err := fetcher.client.GetSignaturesForAddress(ctx, burnLogPubk, &solanaRPC.GetSignaturesForAddressOpts{})
if err != nil {
Expand All @@ -204,8 +200,8 @@ func (fetcher SolFetcher) FetchBurnLogs(ctx context.Context, from uint64, to uin

result := BurnInfo{
Txid: base58.Decode(signatures[0].Signature),
Amount: pack.NewU256(amount),
ToBytes: recipient[:],
Amount: amount,
ToBytes: []byte(recipient),
Nonce: nonceBytes,
BlockNumber: pack.NewU64(i),
}
Expand Down Expand Up @@ -424,13 +420,7 @@ func (watcher Watcher) burnToParams(txid pack.Bytes, amount pack.U256, toBytes [
var to multichain.Address
var toDecoded []byte
var err error
burnChain := watcher.selector.Source()
switch burnChain {
case multichain.Solana:
to, toDecoded, err = watcher.handleAssetAddrSolana(toBytes)
default:
to, toDecoded, err = watcher.handleAssetAddrEth(toBytes)
}
to, toDecoded, err = watcher.handleAssetAddr(toBytes)
if err != nil {
return jsonrpc.ParamsSubmitTx{}, err
}
Expand Down Expand Up @@ -482,7 +472,7 @@ func (watcher Watcher) burnToParams(txid pack.Bytes, amount pack.U256, toBytes [
return jsonrpc.ParamsSubmitTx{Tx: transaction}, nil
}

func (watcher Watcher) handleAssetAddrEth(toBytes []byte) (multichain.Address, []byte, error) {
func (watcher Watcher) handleAssetAddr(toBytes []byte) (multichain.Address, []byte, error) {
// For v0 burn, `to` can be base58 encoded
to := multichain.Address(toBytes)
switch watcher.selector.Asset() {
Expand All @@ -507,15 +497,6 @@ func (watcher Watcher) handleAssetAddrEth(toBytes []byte) (multichain.Address, [
return to, toBytes, nil
}

func (watcher Watcher) handleAssetAddrSolana(toBytes []byte) (multichain.Address, []byte, error) {
encoder := AddressEncodeDecoder(watcher.selector.Asset().OriginChain(), watcher.network)
to, err := encoder.EncodeAddress(toBytes)
if err != nil {
return "", nil, fmt.Errorf("encoding raw asset address returned by solana: %v", err)
}
return to, toBytes, nil
}

func AddressEncodeDecoder(chain multichain.Chain, network multichain.Network) multichain.AddressEncodeDecoder {
switch chain {
case multichain.Bitcoin, multichain.DigiByte, multichain.Dogecoin:
Expand Down
2 changes: 1 addition & 1 deletion watcher/watcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -771,7 +771,7 @@ var _ = Describe("Watcher", func() {
}, 15*time.Second).Should(Equal(BurnLogResult{Result: BurnInfo{
Txid: []byte{},
Amount: pack.NewU256FromUint64(100000000),
ToBytes: []byte{111, 156, 83, 29, 221, 210, 44, 11, 79, 156, 112, 96, 116, 20, 53, 247, 21, 98, 180, 2, 95, 155, 124, 199, 196},
ToBytes: []byte("mumXH2WH8z8JMBuKrArV4XpNnf3xaR6Guy"),
Nonce: [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
BlockNumber: 1,
}}))
Expand Down

0 comments on commit 9fd745d

Please sign in to comment.