cloud_functions: terra2 support (#1349)
This commit is contained in:
parent
061244dc17
commit
cbc92a9571
|
@ -107,6 +107,8 @@ func chainIdToCoinGeckoPlatform(chain vaa.ChainID) string {
|
|||
return "klay-token"
|
||||
case vaa.ChainIDCelo:
|
||||
return "celo"
|
||||
case vaa.ChainIDTerra2:
|
||||
return "" // TODO
|
||||
case vaa.ChainIDEthereumRopsten:
|
||||
return "ethereum"
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"log"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/certusone/wormhole/node/pkg/vaa"
|
||||
|
@ -20,8 +21,11 @@ import (
|
|||
|
||||
// terra native tokens do not have a bech32 address like cw20s do, handle them manually.
|
||||
var tokenAddressExceptions = map[string]string{
|
||||
// terra (classic)
|
||||
"0100000000000000000000000000000000000000000000000000000075757364": "uusd",
|
||||
"010000000000000000000000000000000000000000000000000000756c756e61": "uluna",
|
||||
// terra2
|
||||
"01fa6c6fbc36d8c245b0a852a43eb5d644e8b4c477b27bfab9537c10945939da": "uluna",
|
||||
}
|
||||
|
||||
// returns a pair of dates before and after the input time.
|
||||
|
@ -62,26 +66,44 @@ func transformHexAddressToNative(chain vaa.ChainID, address string) string {
|
|||
if val, ok := tokenAddressExceptions[address]; ok {
|
||||
return val
|
||||
}
|
||||
|
||||
trimmed := address[(len(address) - 40):]
|
||||
data, decodeErr := hex.DecodeString(trimmed)
|
||||
if decodeErr != nil {
|
||||
fmt.Printf("failed to decode unpadded string: %v\n", decodeErr)
|
||||
}
|
||||
encodedAddr, convertErr := bech32.ConvertAndEncode("terra", data)
|
||||
if convertErr != nil {
|
||||
fmt.Println("convert error from cosmos bech32. err", convertErr)
|
||||
}
|
||||
return encodedAddr
|
||||
return humanAddressTerra(address)
|
||||
case vaa.ChainIDAlgorand:
|
||||
// TODO
|
||||
return ""
|
||||
case vaa.ChainIDTerra2:
|
||||
// handle terra2 native assets manually
|
||||
if val, ok := tokenAddressExceptions[address]; ok {
|
||||
return val
|
||||
}
|
||||
// terra2 has 32 byte addresses for contracts and 20 for wallets
|
||||
if isLikely20ByteTerra(address) {
|
||||
return humanAddressTerra(address)
|
||||
}
|
||||
// TODO: other terra2 asset types
|
||||
return ""
|
||||
default:
|
||||
log.Println("cannot process address for unknown chain: ", chain)
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
func isLikely20ByteTerra(address string) bool {
|
||||
return strings.HasPrefix(address, "00000000000000000000")
|
||||
}
|
||||
|
||||
func humanAddressTerra(address string) string {
|
||||
trimmed := address[(len(address) - 40):]
|
||||
data, decodeErr := hex.DecodeString(trimmed)
|
||||
if decodeErr != nil {
|
||||
fmt.Printf("failed to decode unpadded string: %v\n", decodeErr)
|
||||
}
|
||||
encodedAddr, convertErr := bech32.ConvertAndEncode("terra", data)
|
||||
if convertErr != nil {
|
||||
fmt.Println("convert error from cosmos bech32. err", convertErr)
|
||||
}
|
||||
return encodedAddr
|
||||
}
|
||||
|
||||
// ProcessTransfer is triggered by a PubSub message, once a TokenTransferPayload is written to a row.
|
||||
func ProcessTransfer(ctx context.Context, m PubSubMessage) error {
|
||||
data := string(m.Data)
|
||||
|
|
|
@ -53,28 +53,30 @@ var NFTEmitters = map[string]string{}
|
|||
|
||||
var tokenTransferEmitters = map[string]string{
|
||||
// mainnet
|
||||
"ec7372995d5cc8732397fb0ad35c0121e0eaa90d26f828a534cab54391b3a4f5": "wormDTUJ6AWPNvk59vGQbDvGJmqbDTdgWgAqcLBCgUb", // solana
|
||||
"0000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585": "0x3ee18B2214AFF97000D974cf647E7C347E8fa585", // ethereum
|
||||
"0000000000000000000000007cf7b764e38a0a5e967972c1df77d432510564e2": "terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf", // terra
|
||||
"000000000000000000000000b6f6d86a8f9879a9c87f643768d9efc38c1da6e7": "0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", // bsc
|
||||
"0000000000000000000000005a58505a96d1dbf8df91cb21b54419fc36e93fde": "0x5a58505a96d1dbf8df91cb21b54419fc36e93fde", // polygon
|
||||
"0000000000000000000000000e082f06ff657d94310cb8ce8b0d9a04541d8052": "0x0e082F06FF657D94310cB8cE8B0D9a04541d8052", // avalanche
|
||||
"0000000000000000000000005848c791e09901b40a9ef749f2a6735b418d7564": "0x5848c791e09901b40a9ef749f2a6735b418d7564", // oasis
|
||||
"0000000000000000000000007c9fc5741288cdfdd83ceb07f3ea7e22618d79d2": "0x7c9fc5741288cdfdd83ceb07f3ea7e22618d79d2", // fantom
|
||||
"00000000000000000000000051b5123a7b0F9b2bA265f9c4C8de7D78D52f510F": "0x51b5123a7b0F9b2bA265f9c4C8de7D78D52f510F", // aurora
|
||||
"000000000000000000000000ae9d7fe007b3327AA64A32824Aaac52C42a6E624": "0xae9d7fe007b3327AA64A32824Aaac52C42a6E624", // acala & karura
|
||||
"000000000000000000000000796Dff6D74F3E27060B71255Fe517BFb23C93eed": "0x796Dff6D74F3E27060B71255Fe517BFb23C93eed", // celo
|
||||
"0000000000000000000000005b08ac39EAED75c0439FC750d9FE7E1F9dD0193F": "0x5b08ac39EAED75c0439FC750d9FE7E1F9dD0193F", // klaytn
|
||||
"ec7372995d5cc8732397fb0ad35c0121e0eaa90d26f828a534cab54391b3a4f5": "wormDTUJ6AWPNvk59vGQbDvGJmqbDTdgWgAqcLBCgUb", // solana
|
||||
"0000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585": "0x3ee18B2214AFF97000D974cf647E7C347E8fa585", // ethereum
|
||||
"0000000000000000000000007cf7b764e38a0a5e967972c1df77d432510564e2": "terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf", // terra
|
||||
"000000000000000000000000b6f6d86a8f9879a9c87f643768d9efc38c1da6e7": "0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", // bsc
|
||||
"0000000000000000000000005a58505a96d1dbf8df91cb21b54419fc36e93fde": "0x5a58505a96d1dbf8df91cb21b54419fc36e93fde", // polygon
|
||||
"0000000000000000000000000e082f06ff657d94310cb8ce8b0d9a04541d8052": "0x0e082F06FF657D94310cB8cE8B0D9a04541d8052", // avalanche
|
||||
"0000000000000000000000005848c791e09901b40a9ef749f2a6735b418d7564": "0x5848c791e09901b40a9ef749f2a6735b418d7564", // oasis
|
||||
"0000000000000000000000007c9fc5741288cdfdd83ceb07f3ea7e22618d79d2": "0x7c9fc5741288cdfdd83ceb07f3ea7e22618d79d2", // fantom
|
||||
"00000000000000000000000051b5123a7b0F9b2bA265f9c4C8de7D78D52f510F": "0x51b5123a7b0F9b2bA265f9c4C8de7D78D52f510F", // aurora
|
||||
"000000000000000000000000ae9d7fe007b3327AA64A32824Aaac52C42a6E624": "0xae9d7fe007b3327AA64A32824Aaac52C42a6E624", // acala & karura
|
||||
"000000000000000000000000796Dff6D74F3E27060B71255Fe517BFb23C93eed": "0x796Dff6D74F3E27060B71255Fe517BFb23C93eed", // celo
|
||||
"0000000000000000000000005b08ac39EAED75c0439FC750d9FE7E1F9dD0193F": "0x5b08ac39EAED75c0439FC750d9FE7E1F9dD0193F", // klaytn
|
||||
"a463ad028fb79679cfc8ce1efba35ac0e77b35080a1abe9bebe83461f176b0a3": "terra153366q50k7t8nn7gec00hg66crnhkdggpgdtaxltaq6xrutkkz3s992fw9", // terra2
|
||||
|
||||
// devnet
|
||||
"c69a1b1a65dd336bf1df6a77afb501fc25db7fc0938cb08595a9ef473265cb4f": "B6RHG3mfcckmrYN1UhmJzyS1XX3fZKbkeUcpJe9Sy3FE", // solana
|
||||
"0000000000000000000000000290fb167208af455bb137780163b7b7a9a10c16": "0x0290fb167208af455bb137780163b7b7a9a10c16", // ethereum goerli
|
||||
"000000000000000000000000784999135aaa8a3ca5914468852fdddbddd8789d": "terra10pyejy66429refv3g35g2t7am0was7ya7kz2a4", // terra
|
||||
"0000000000000000000000009dcF9D205C9De35334D646BeE44b2D2859712A09": "0x9dcF9D205C9De35334D646BeE44b2D2859712A09", // bsc
|
||||
"000000000000000000000000377D55a7928c046E18eEbb61977e714d2a76472a": "0x377D55a7928c046E18eEbb61977e714d2a76472a", // polygon
|
||||
"00000000000000000000000061E44E506Ca5659E6c0bba9b678586fA2d729756": "0x61E44E506Ca5659E6c0bba9b678586fA2d729756", // avalanche
|
||||
"00000000000000000000000088d8004A9BdbfD9D28090A02010C19897a29605c": "0x88d8004A9BdbfD9D28090A02010C19897a29605c", // oasis
|
||||
"000000000000000000000000F174F9A837536C449321df1Ca093Bb96948D5386": "0xF174F9A837536C449321df1Ca093Bb96948D5386", // ethereum ropsten
|
||||
"c69a1b1a65dd336bf1df6a77afb501fc25db7fc0938cb08595a9ef473265cb4f": "B6RHG3mfcckmrYN1UhmJzyS1XX3fZKbkeUcpJe9Sy3FE", // solana
|
||||
"0000000000000000000000000290fb167208af455bb137780163b7b7a9a10c16": "0x0290fb167208af455bb137780163b7b7a9a10c16", // ethereum goerli
|
||||
"000000000000000000000000784999135aaa8a3ca5914468852fdddbddd8789d": "terra10pyejy66429refv3g35g2t7am0was7ya7kz2a4", // terra
|
||||
"0000000000000000000000009dcF9D205C9De35334D646BeE44b2D2859712A09": "0x9dcF9D205C9De35334D646BeE44b2D2859712A09", // bsc
|
||||
"000000000000000000000000377D55a7928c046E18eEbb61977e714d2a76472a": "0x377D55a7928c046E18eEbb61977e714d2a76472a", // polygon
|
||||
"00000000000000000000000061E44E506Ca5659E6c0bba9b678586fA2d729756": "0x61E44E506Ca5659E6c0bba9b678586fA2d729756", // avalanche
|
||||
"00000000000000000000000088d8004A9BdbfD9D28090A02010C19897a29605c": "0x88d8004A9BdbfD9D28090A02010C19897a29605c", // oasis
|
||||
"000000000000000000000000F174F9A837536C449321df1Ca093Bb96948D5386": "0xF174F9A837536C449321df1Ca093Bb96948D5386", // ethereum ropsten
|
||||
"9e28beafa966b2407bffb0d48651e94972a56e69f3c0897d9e8facbdaeb98386": "terra1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrquka9l6", // terra2
|
||||
}
|
||||
|
||||
var muTokenTransferEmitters sync.RWMutex
|
||||
|
|
|
@ -256,6 +256,8 @@ func chainIdStringToType(chainId string) vaa.ChainID {
|
|||
return vaa.ChainIDKlaytn
|
||||
case "14":
|
||||
return vaa.ChainIDCelo
|
||||
case "18":
|
||||
return vaa.ChainIDTerra2
|
||||
case "10001":
|
||||
return vaa.ChainIDEthereumRopsten
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue