diff --git a/chain/bitcoin/address.go b/chain/bitcoin/address.go index 1bed45c4..8be89372 100644 --- a/chain/bitcoin/address.go +++ b/chain/bitcoin/address.go @@ -102,6 +102,9 @@ func (decoder AddressDecoder) DecodeAddress(addr address.Address) (address.RawAd if err != nil { return nil, fmt.Errorf("decode address: %v", err) } + if !decodedAddr.IsForNet(decoder.params) { + return nil, fmt.Errorf("address of different network") + } switch a := decodedAddr.(type) { case *btcutil.AddressPubKeyHash, *btcutil.AddressScriptHash: diff --git a/chain/bitcoin/utxo.go b/chain/bitcoin/utxo.go index 119e5880..f8ab8627 100644 --- a/chain/bitcoin/utxo.go +++ b/chain/bitcoin/utxo.go @@ -56,6 +56,9 @@ func (txBuilder TxBuilder) BuildTx(inputs []utxo.Input, recipients []utxo.Recipi if err != nil { return nil, err } + if !addr.IsForNet(txBuilder.params) { + return nil, fmt.Errorf("addr of a different network") + } script, err := txscript.PayToAddrScript(addr) if err != nil { return nil, err diff --git a/chain/bitcoincash/address.go b/chain/bitcoincash/address.go index f72d3a48..26815c08 100644 --- a/chain/bitcoincash/address.go +++ b/chain/bitcoincash/address.go @@ -97,6 +97,9 @@ func (encoder AddressEncoder) EncodeAddress(rawAddr address.RawAddress) (address func (decoder AddressDecoder) DecodeAddress(addr address.Address) (address.RawAddress, error) { // Legacy address decoding if legacyAddr, err := btcutil.DecodeAddress(string(addr), decoder.params); err == nil { + if !legacyAddr.IsForNet(decoder.params) { + return nil, fmt.Errorf("address of different network") + } switch legacyAddr.(type) { case *btcutil.AddressPubKeyHash, *btcutil.AddressScriptHash, *btcutil.AddressPubKey: return decodeLegacyAddress(addr, decoder.params) diff --git a/chain/dogecoin/address_test.go b/chain/dogecoin/address_test.go index e03320bb..7c4c38d4 100644 --- a/chain/dogecoin/address_test.go +++ b/chain/dogecoin/address_test.go @@ -1 +1,24 @@ package dogecoin_test + +import ( + "github.com/renproject/multichain" + "github.com/renproject/multichain/chain/bitcoin" + "github.com/renproject/multichain/chain/dogecoin" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Dogecoin", func() { + Context("when decoding segwit address", func() { + Context("when decoding an address from a different network ", func() { + It("should return an error ", func() { + // A valid bitcoin segwit address which is not a valid doge address + addr := multichain.Address("bc1qk6yk2ctcu2pmtxfzhya692h774562vlv2g7dvl") + decoder := bitcoin.NewAddressDecoder(&dogecoin.MainNetParams) + _, err := decoder.DecodeAddress(addr) + Expect(err).To(HaveOccurred()) + }) + }) + }) +}) diff --git a/infra/terra/Dockerfile b/infra/terra/Dockerfile index 0b83e400..26531852 100644 --- a/infra/terra/Dockerfile +++ b/infra/terra/Dockerfile @@ -7,8 +7,8 @@ RUN tar -C /usr/local -xzf go1.16.8.linux-amd64.tar.gz ENV PATH=$PATH:/usr/local/go/bin WORKDIR /app -RUN git clone https://github.com/terra-money/core.git -WORKDIR /app/core +RUN git clone https://github.com/terra-money/classic-core.git +WORKDIR /app/classic-core RUN git fetch --all -p RUN git checkout v0.5.5 RUN make install