Quellcode durchsuchen

sdk/js: publish separate wasm package

Evan Gray vor 3 Jahren
Ursprung
Commit
061244dc17

+ 1 - 15
Tiltfile

@@ -108,20 +108,6 @@ local_resource(
     trigger_mode = trigger_mode,
 )
 
-# wasm
-
-if solana:
-    local_resource(
-        name = "wasm-gen",
-        deps = ["solana"],
-        dir = "solana",
-        cmd = "tilt docker build -- -f Dockerfile.wasm -o type=local,dest=.. .",
-        env = {"DOCKER_BUILDKIT": "1"},
-        labels = ["solana"],
-        allow_parallel = True,
-        trigger_mode = trigger_mode,
-    )
-
 # node
 
 if explorer:
@@ -496,7 +482,7 @@ if ci_tests:
 
     k8s_resource(
         "ci-tests",
-        resource_deps = ["wasm-gen", "eth-devnet", "eth-devnet2", "terra-terrad", "terra-fcd", "terra2-terrad", "terra2-fcd", "solana-devnet", "spy", "guardian"],
+        resource_deps = ["eth-devnet", "eth-devnet2", "terra-terrad", "terra-fcd", "terra2-terrad", "terra2-fcd", "solana-devnet", "spy", "guardian"],
         labels = ["ci"],
         trigger_mode = trigger_mode,
     )

+ 152 - 49
bridge_ui/package-lock.json

@@ -8,7 +8,7 @@
       "name": "test_ui",
       "version": "0.1.0",
       "dependencies": {
-        "@certusone/wormhole-sdk": "^0.4.5",
+        "@certusone/wormhole-sdk": "^0.5.0",
         "@material-ui/core": "^4.12.2",
         "@material-ui/icons": "^4.11.2",
         "@material-ui/lab": "^4.0.0-alpha.60",
@@ -87,20 +87,19 @@
     },
     "../sdk/js": {
       "name": "@certusone/wormhole-sdk",
-      "version": "0.3.8",
+      "version": "0.5.0",
       "extraneous": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@improbable-eng/grpc-web": "^0.14.0",
+        "@certusone/wormhole-sdk-proto-web": "^0.0.1",
+        "@certusone/wormhole-sdk-wasm": "file:../js-wasm",
         "@solana/spl-token": "^0.1.8",
         "@solana/web3.js": "^1.24.0",
         "@terra-money/terra.js": "^3.1.3",
         "algosdk": "^1.15.0",
         "axios": "^0.24.0",
         "bech32": "^2.0.0",
-        "js-base64": "^3.6.1",
-        "protobufjs": "^6.11.2",
-        "rxjs": "^7.3.0"
+        "js-base64": "^3.6.1"
       },
       "devDependencies": {
         "@improbable-eng/grpc-web-node-http-transport": "^0.15.0",
@@ -2132,26 +2131,35 @@
       }
     },
     "node_modules/@certusone/wormhole-sdk": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.4.5.tgz",
-      "integrity": "sha512-Wx726yI7zTIaDM2h/Ffrz3tjCKh4ZO5PDvwq/m5iVv6HqnL6xjrS6g8Qnq/K68cOMIJcxrqLW2SNl3vLUMLT7w==",
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.5.0.tgz",
+      "integrity": "sha512-Z8Cj2yZ41if842jSSLzKLomwkq9PgXdjVq3r3VNzkSM3aZavU8vZqNT33LU9IabmW7hiWe1uI9j2Z1JZe7SIEg==",
       "dependencies": {
-        "@improbable-eng/grpc-web": "^0.14.0",
+        "@certusone/wormhole-sdk-proto-web": "^0.0.1",
+        "@certusone/wormhole-sdk-wasm": "^0.0.1",
         "@solana/spl-token": "^0.1.8",
         "@solana/web3.js": "^1.24.0",
         "@terra-money/terra.js": "^3.1.3",
         "algosdk": "^1.15.0",
         "axios": "^0.24.0",
         "bech32": "^2.0.0",
-        "js-base64": "^3.6.1",
-        "protobufjs": "^6.11.2",
-        "rxjs": "^7.3.0"
+        "js-base64": "^3.6.1"
       }
     },
-    "node_modules/@certusone/wormhole-sdk/node_modules/@improbable-eng/grpc-web": {
-      "version": "0.14.1",
-      "resolved": "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.14.1.tgz",
-      "integrity": "sha512-XaIYuunepPxoiGVLLHmlnVminUGzBTnXr8Wv7khzmLWbNw4TCwJKX09GSMJlKhu/TRk6gms0ySFxewaETSBqgw==",
+    "node_modules/@certusone/wormhole-sdk-proto-web": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.1.tgz",
+      "integrity": "sha512-v6D+vCPqzTmrRuN0ZHpOdA1XnF3nmaD1wlJf025SXb7JFhVSmKyFXzLajkt50rk6SCkEvXtRlxNTJtnuCxg94Q==",
+      "dependencies": {
+        "@improbable-eng/grpc-web": "^0.15.0",
+        "protobufjs": "^7.0.0",
+        "rxjs": "^7.5.6"
+      }
+    },
+    "node_modules/@certusone/wormhole-sdk-proto-web/node_modules/@improbable-eng/grpc-web": {
+      "version": "0.15.0",
+      "resolved": "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.15.0.tgz",
+      "integrity": "sha512-ERft9/0/8CmYalqOVnJnpdDry28q+j+nAlFFARdjyxXDJ+Mhgv9+F600QC8BR9ygOfrXRlAk6CvST2j+JCpQPg==",
       "dependencies": {
         "browser-headers": "^0.4.1"
       },
@@ -2159,6 +2167,57 @@
         "google-protobuf": "^3.14.0"
       }
     },
+    "node_modules/@certusone/wormhole-sdk-proto-web/node_modules/long": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz",
+      "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w=="
+    },
+    "node_modules/@certusone/wormhole-sdk-proto-web/node_modules/protobufjs": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz",
+      "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==",
+      "hasInstallScript": true,
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/long": "^4.0.1",
+        "@types/node": ">=13.7.0",
+        "long": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/@certusone/wormhole-sdk-proto-web/node_modules/rxjs": {
+      "version": "7.5.6",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz",
+      "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@certusone/wormhole-sdk-wasm": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-wasm/-/wormhole-sdk-wasm-0.0.1.tgz",
+      "integrity": "sha512-LdIwLhOyr4pPs2jqYubqC7d4UkqYBX0EG/ppspQlW3qlVE0LZRMrH6oVzzLMyHtV0Rw7O9sIKzORW/T3mrJv2w==",
+      "dependencies": {
+        "@types/long": "^4.0.2",
+        "@types/node": "^18.0.3"
+      }
+    },
+    "node_modules/@certusone/wormhole-sdk-wasm/node_modules/@types/node": {
+      "version": "18.0.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
+      "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
+    },
     "node_modules/@certusone/wormhole-sdk/node_modules/axios": {
       "version": "0.24.0",
       "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
@@ -2172,14 +2231,6 @@
       "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz",
       "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="
     },
-    "node_modules/@certusone/wormhole-sdk/node_modules/rxjs": {
-      "version": "7.5.5",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-      "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
-      "dependencies": {
-        "tslib": "^2.1.0"
-      }
-    },
     "node_modules/@cnakazawa/watch": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
@@ -8763,9 +8814,9 @@
       "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw=="
     },
     "node_modules/@types/long": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
-      "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
+      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
     },
     "node_modules/@types/luxon": {
       "version": "2.3.1",
@@ -46765,30 +46816,21 @@
       }
     },
     "@certusone/wormhole-sdk": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.4.5.tgz",
-      "integrity": "sha512-Wx726yI7zTIaDM2h/Ffrz3tjCKh4ZO5PDvwq/m5iVv6HqnL6xjrS6g8Qnq/K68cOMIJcxrqLW2SNl3vLUMLT7w==",
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.5.0.tgz",
+      "integrity": "sha512-Z8Cj2yZ41if842jSSLzKLomwkq9PgXdjVq3r3VNzkSM3aZavU8vZqNT33LU9IabmW7hiWe1uI9j2Z1JZe7SIEg==",
       "requires": {
-        "@improbable-eng/grpc-web": "^0.14.0",
+        "@certusone/wormhole-sdk-proto-web": "^0.0.1",
+        "@certusone/wormhole-sdk-wasm": "^0.0.1",
         "@solana/spl-token": "^0.1.8",
         "@solana/web3.js": "^1.24.0",
         "@terra-money/terra.js": "^3.1.3",
         "algosdk": "^1.15.0",
         "axios": "^0.24.0",
         "bech32": "^2.0.0",
-        "js-base64": "^3.6.1",
-        "protobufjs": "^6.11.2",
-        "rxjs": "^7.3.0"
+        "js-base64": "^3.6.1"
       },
       "dependencies": {
-        "@improbable-eng/grpc-web": {
-          "version": "0.14.1",
-          "resolved": "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.14.1.tgz",
-          "integrity": "sha512-XaIYuunepPxoiGVLLHmlnVminUGzBTnXr8Wv7khzmLWbNw4TCwJKX09GSMJlKhu/TRk6gms0ySFxewaETSBqgw==",
-          "requires": {
-            "browser-headers": "^0.4.1"
-          }
-        },
         "axios": {
           "version": "0.24.0",
           "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
@@ -46801,17 +46843,78 @@
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz",
           "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="
+        }
+      }
+    },
+    "@certusone/wormhole-sdk-proto-web": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.1.tgz",
+      "integrity": "sha512-v6D+vCPqzTmrRuN0ZHpOdA1XnF3nmaD1wlJf025SXb7JFhVSmKyFXzLajkt50rk6SCkEvXtRlxNTJtnuCxg94Q==",
+      "requires": {
+        "@improbable-eng/grpc-web": "^0.15.0",
+        "protobufjs": "^7.0.0",
+        "rxjs": "^7.5.6"
+      },
+      "dependencies": {
+        "@improbable-eng/grpc-web": {
+          "version": "0.15.0",
+          "resolved": "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.15.0.tgz",
+          "integrity": "sha512-ERft9/0/8CmYalqOVnJnpdDry28q+j+nAlFFARdjyxXDJ+Mhgv9+F600QC8BR9ygOfrXRlAk6CvST2j+JCpQPg==",
+          "requires": {
+            "browser-headers": "^0.4.1"
+          }
+        },
+        "long": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz",
+          "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w=="
+        },
+        "protobufjs": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz",
+          "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==",
+          "requires": {
+            "@protobufjs/aspromise": "^1.1.2",
+            "@protobufjs/base64": "^1.1.2",
+            "@protobufjs/codegen": "^2.0.4",
+            "@protobufjs/eventemitter": "^1.1.0",
+            "@protobufjs/fetch": "^1.1.0",
+            "@protobufjs/float": "^1.0.2",
+            "@protobufjs/inquire": "^1.1.0",
+            "@protobufjs/path": "^1.1.2",
+            "@protobufjs/pool": "^1.1.0",
+            "@protobufjs/utf8": "^1.1.0",
+            "@types/long": "^4.0.1",
+            "@types/node": ">=13.7.0",
+            "long": "^5.0.0"
+          }
         },
         "rxjs": {
-          "version": "7.5.5",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-          "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+          "version": "7.5.6",
+          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz",
+          "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==",
           "requires": {
             "tslib": "^2.1.0"
           }
         }
       }
     },
+    "@certusone/wormhole-sdk-wasm": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-wasm/-/wormhole-sdk-wasm-0.0.1.tgz",
+      "integrity": "sha512-LdIwLhOyr4pPs2jqYubqC7d4UkqYBX0EG/ppspQlW3qlVE0LZRMrH6oVzzLMyHtV0Rw7O9sIKzORW/T3mrJv2w==",
+      "requires": {
+        "@types/long": "^4.0.2",
+        "@types/node": "^18.0.3"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "18.0.3",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
+          "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
+        }
+      }
+    },
     "@cnakazawa/watch": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
@@ -52245,9 +52348,9 @@
       "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw=="
     },
     "@types/long": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
-      "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
+      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
     },
     "@types/luxon": {
       "version": "2.3.1",

+ 1 - 1
bridge_ui/package.json

@@ -3,7 +3,7 @@
   "version": "0.1.0",
   "private": true,
   "dependencies": {
-    "@certusone/wormhole-sdk": "^0.4.5",
+    "@certusone/wormhole-sdk": "^0.5.0",
     "@material-ui/core": "^4.12.2",
     "@material-ui/icons": "^4.11.2",
     "@material-ui/lab": "^4.0.0-alpha.60",

+ 30 - 0
sdk/js-wasm/.gitignore

@@ -0,0 +1,30 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# wasm output
+/src/**
+!/src/index.ts
+
+# build
+/lib

+ 13 - 0
sdk/js-wasm/LICENSE

@@ -0,0 +1,13 @@
+Copyright 2020 Wormhole Project Contributors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.

+ 7 - 0
sdk/js-wasm/README.md

@@ -0,0 +1,7 @@
+# Wormhole SDK WebAssembly
+
+WebAssembly libraries for interacting with Wormhole
+
+> Note: This code is generated by `wasm-pack` for both `--target bundler` and `--target nodejs`
+
+By default, this loads the bundler wasm libraries. Use `setDefaultWasm("node")` if you need the node ones.

+ 61 - 0
sdk/js-wasm/package-lock.json

@@ -0,0 +1,61 @@
+{
+  "name": "@certusone/wormhole-sdk-wasm",
+  "version": "0.0.1",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "@certusone/wormhole-sdk-wasm",
+      "version": "0.0.1",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@types/long": "^4.0.2",
+        "@types/node": "^18.0.3"
+      },
+      "devDependencies": {
+        "typescript": "^4.7.4"
+      }
+    },
+    "node_modules/@types/long": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
+      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
+    },
+    "node_modules/@types/node": {
+      "version": "18.0.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
+      "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
+    },
+    "node_modules/typescript": {
+      "version": "4.7.4",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
+      "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
+      "dev": true,
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=4.2.0"
+      }
+    }
+  },
+  "dependencies": {
+    "@types/long": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
+      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
+    },
+    "@types/node": {
+      "version": "18.0.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
+      "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
+    },
+    "typescript": {
+      "version": "4.7.4",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
+      "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
+      "dev": true
+    }
+  }
+}

+ 32 - 0
sdk/js-wasm/package.json

@@ -0,0 +1,32 @@
+{
+  "name": "@certusone/wormhole-sdk-wasm",
+  "version": "0.0.1",
+  "description": "WebAssembly libraries for interacting with Wormhole",
+  "homepage": "https://wormholenetwork.com",
+  "main": "./lib/cjs/index.js",
+  "module": "./lib/esm/index.js",
+  "files": [
+    "lib/"
+  ],
+  "repository": "https://github.com/certusone/wormhole/tree/dev.v2/sdk/js-wasm",
+  "scripts": {
+    "build-deps": "cd ../.. && DOCKER_BUILDKIT=1 docker build -f solana/Dockerfile.wasm -o type=local,dest=. solana",
+    "build-lib": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && node scripts/copyWasm.js",
+    "build-all": "npm run build-deps && npm run build-lib",
+    "build": "npm run build-all"
+  },
+  "keywords": [
+    "wormhole",
+    "sdk",
+    "wasm"
+  ],
+  "author": "certusone",
+  "license": "Apache-2.0",
+  "devDependencies": {
+    "typescript": "^4.7.4"
+  },
+  "dependencies": {
+    "@types/long": "^4.0.2",
+    "@types/node": "^18.0.3"
+  }
+}

+ 67 - 0
sdk/js-wasm/scripts/copyWasm.js

@@ -0,0 +1,67 @@
+const fs = require("fs");
+["lib/esm", "lib/cjs"].forEach((buildPath) => {
+  fs.copyFileSync(
+    `src/core/bridge_bg.wasm`,
+    `${buildPath}/core/bridge_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/core-node/bridge_bg.wasm`,
+    `${buildPath}/core-node/bridge_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/core/bridge_bg.wasm.d.ts`,
+    `${buildPath}/core/bridge_bg.wasm.d.ts`
+  );
+  fs.copyFileSync(
+    `src/core-node/bridge_bg.wasm.d.ts`,
+    `${buildPath}/core-node/bridge_bg.wasm.d.ts`
+  );
+  fs.copyFileSync(
+    `src/nft/nft_bridge_bg.wasm`,
+    `${buildPath}/nft/nft_bridge_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/nft-node/nft_bridge_bg.wasm`,
+    `${buildPath}/nft-node/nft_bridge_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/nft/nft_bridge_bg.wasm.d.ts`,
+    `${buildPath}/nft/nft_bridge_bg.wasm.d.ts`
+  );
+  fs.copyFileSync(
+    `src/nft-node/nft_bridge_bg.wasm.d.ts`,
+    `${buildPath}/nft-node/nft_bridge_bg.wasm.d.ts`
+  );
+  fs.copyFileSync(
+    `src/token/token_bridge_bg.wasm`,
+    `${buildPath}/token/token_bridge_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/token-node/token_bridge_bg.wasm`,
+    `${buildPath}/token-node/token_bridge_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/token/token_bridge_bg.wasm.d.ts`,
+    `${buildPath}/token/token_bridge_bg.wasm.d.ts`
+  );
+  fs.copyFileSync(
+    `src/token-node/token_bridge_bg.wasm.d.ts`,
+    `${buildPath}/token-node/token_bridge_bg.wasm.d.ts`
+  );
+  fs.copyFileSync(
+    `src/migration/wormhole_migration_bg.wasm`,
+    `${buildPath}/migration/wormhole_migration_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/migration-node/wormhole_migration_bg.wasm`,
+    `${buildPath}/migration-node/wormhole_migration_bg.wasm`
+  );
+  fs.copyFileSync(
+    `src/migration/wormhole_migration_bg.wasm.d.ts`,
+    `${buildPath}/migration/wormhole_migration_bg.wasm.d.ts`
+  );
+  fs.copyFileSync(
+    `src/migration-node/wormhole_migration_bg.wasm.d.ts`,
+    `${buildPath}/migration-node/wormhole_migration_bg.wasm.d.ts`
+  );
+});

+ 38 - 0
sdk/js-wasm/src/index.ts

@@ -0,0 +1,38 @@
+const coreWasms = {
+  bundler: async () => await import("./core/bridge"),
+  node: async () => await import("./core-node/bridge"),
+};
+const migrationWasms = {
+  bundler: async () => await import("./migration/wormhole_migration"),
+  node: async () => await import("./migration-node/wormhole_migration"),
+};
+const nftWasms = {
+  bundler: async () => await import("./nft/nft_bridge"),
+  node: async () => await import("./nft-node/nft_bridge"),
+};
+const tokenWasms = {
+  bundler: async () => await import("./token/token_bridge"),
+  node: async () => await import("./token-node/token_bridge"),
+};
+let importDefaultCoreWasm = coreWasms.bundler;
+let importDefaultMigrationWasm = migrationWasms.bundler;
+let importDefaultNftWasm = nftWasms.bundler;
+let importDefaultTokenWasm = tokenWasms.bundler;
+export function setDefaultWasm(type: "bundler" | "node") {
+  importDefaultCoreWasm = coreWasms[type];
+  importDefaultMigrationWasm = migrationWasms[type];
+  importDefaultNftWasm = nftWasms[type];
+  importDefaultTokenWasm = tokenWasms[type];
+}
+export async function importCoreWasm() {
+  return await importDefaultCoreWasm();
+}
+export async function importMigrationWasm() {
+  return await importDefaultMigrationWasm();
+}
+export async function importNftWasm() {
+  return await importDefaultNftWasm();
+}
+export async function importTokenWasm() {
+  return await importDefaultTokenWasm();
+}

+ 7 - 0
sdk/js-wasm/tsconfig-cjs.json

@@ -0,0 +1,7 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "module": "CommonJS",
+    "outDir": "./lib/cjs"
+  }
+}

+ 16 - 0
sdk/js-wasm/tsconfig.json

@@ -0,0 +1,16 @@
+{
+  "compilerOptions": {
+    "target": "es5",
+    "module": "esnext",
+    "moduleResolution": "node",
+    "declaration": true,
+    "outDir": "./lib/esm",
+    "strict": true,
+    "esModuleInterop": true,
+    "downlevelIteration": true,
+    "allowJs": true,
+    "lib": ["dom", "es5", "scripthost", "es2020.bigint"]
+  },
+  "include": ["src", "types"],
+  "exclude": ["node_modules", "**/__tests__/*"]
+}

+ 1 - 1
sdk/js/CHANGELOG.md

@@ -4,7 +4,7 @@
 
 ### Changed
 
-Use `@certusone/wormhole-sdk-proto-web` package
+Use `@certusone/wormhole-sdk-proto-web` and `@certusone/wormhole-sdk-wasm` packages
 
 ## 0.4.5
 

+ 50 - 6
sdk/js/package-lock.json

@@ -10,6 +10,7 @@
       "license": "Apache-2.0",
       "dependencies": {
         "@certusone/wormhole-sdk-proto-web": "^0.0.1",
+        "@certusone/wormhole-sdk-wasm": "^0.0.1",
         "@solana/spl-token": "^0.1.8",
         "@solana/web3.js": "^1.24.0",
         "@terra-money/terra.js": "^3.1.3",
@@ -53,6 +54,19 @@
         "typescript": "^4.7.4"
       }
     },
+    "../js-wasm": {
+      "name": "@certusone/wormhole-sdk-wasm",
+      "version": "0.0.1",
+      "extraneous": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@types/long": "^4.0.2",
+        "@types/node": "^18.0.3"
+      },
+      "devDependencies": {
+        "typescript": "^4.7.4"
+      }
+    },
     "node_modules/@babel/code-frame": {
       "version": "7.16.0",
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
@@ -675,6 +689,20 @@
         "node": ">=12.0.0"
       }
     },
+    "node_modules/@certusone/wormhole-sdk-wasm": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-wasm/-/wormhole-sdk-wasm-0.0.1.tgz",
+      "integrity": "sha512-LdIwLhOyr4pPs2jqYubqC7d4UkqYBX0EG/ppspQlW3qlVE0LZRMrH6oVzzLMyHtV0Rw7O9sIKzORW/T3mrJv2w==",
+      "dependencies": {
+        "@types/long": "^4.0.2",
+        "@types/node": "^18.0.3"
+      }
+    },
+    "node_modules/@certusone/wormhole-sdk-wasm/node_modules/@types/node": {
+      "version": "18.0.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
+      "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
+    },
     "node_modules/@ethereumjs/common": {
       "version": "2.6.0",
       "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz",
@@ -2481,9 +2509,9 @@
       "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw=="
     },
     "node_modules/@types/long": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
-      "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
+      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
     },
     "node_modules/@types/node": {
       "version": "16.6.1",
@@ -12133,6 +12161,22 @@
         }
       }
     },
+    "@certusone/wormhole-sdk-wasm": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-wasm/-/wormhole-sdk-wasm-0.0.1.tgz",
+      "integrity": "sha512-LdIwLhOyr4pPs2jqYubqC7d4UkqYBX0EG/ppspQlW3qlVE0LZRMrH6oVzzLMyHtV0Rw7O9sIKzORW/T3mrJv2w==",
+      "requires": {
+        "@types/long": "^4.0.2",
+        "@types/node": "^18.0.3"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "18.0.3",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
+          "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
+        }
+      }
+    },
     "@ethereumjs/common": {
       "version": "2.6.0",
       "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz",
@@ -13414,9 +13458,9 @@
       "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw=="
     },
     "@types/long": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
-      "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
+      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
     },
     "@types/node": {
       "version": "16.6.1",

+ 2 - 1
sdk/js/package.json

@@ -13,7 +13,7 @@
     "build-contracts": "npm run build --prefix ../../ethereum && node scripts/copyContracts.js && typechain --target=ethers-v5 --out-dir=src/ethers-contracts contracts/*.json",
     "build-abis": "typechain --target=ethers-v5 --out-dir=src/ethers-contracts/abi src/abi/Wormhole.abi.json",
     "build-deps": "npm run build-abis && npm run build-contracts",
-    "build-lib": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && node scripts/copyEthersTypes.js && node scripts/copyWasm.js",
+    "build-lib": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && node scripts/copyEthersTypes.js",
     "build-all": "npm run build-deps && npm run build-lib",
     "test": "jest --config jestconfig.json --verbose",
     "test-ci": "jest --config jestconfig.json --verbose --setupFiles ./ci-config.js --forceExit",
@@ -57,6 +57,7 @@
   },
   "dependencies": {
     "@certusone/wormhole-sdk-proto-web": "^0.0.1",
+    "@certusone/wormhole-sdk-wasm": "^0.0.1",
     "@solana/spl-token": "^0.1.8",
     "@solana/web3.js": "^1.24.0",
     "@terra-money/terra.js": "^3.1.3",

+ 0 - 67
sdk/js/scripts/copyWasm.js

@@ -1,67 +0,0 @@
-const fs = require("fs");
-["lib/esm", "lib/cjs"].forEach((buildPath) => {
-  fs.copyFileSync(
-    `src/solana/core/bridge_bg.wasm`,
-    `${buildPath}/solana/core/bridge_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/core-node/bridge_bg.wasm`,
-    `${buildPath}/solana/core-node/bridge_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/core/bridge_bg.wasm.d.ts`,
-    `${buildPath}/solana/core/bridge_bg.wasm.d.ts`
-  );
-  fs.copyFileSync(
-    `src/solana/core-node/bridge_bg.wasm.d.ts`,
-    `${buildPath}/solana/core-node/bridge_bg.wasm.d.ts`
-  );
-  fs.copyFileSync(
-    `src/solana/nft/nft_bridge_bg.wasm`,
-    `${buildPath}/solana/nft/nft_bridge_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/nft-node/nft_bridge_bg.wasm`,
-    `${buildPath}/solana/nft-node/nft_bridge_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/nft/nft_bridge_bg.wasm.d.ts`,
-    `${buildPath}/solana/nft/nft_bridge_bg.wasm.d.ts`
-  );
-  fs.copyFileSync(
-    `src/solana/nft-node/nft_bridge_bg.wasm.d.ts`,
-    `${buildPath}/solana/nft-node/nft_bridge_bg.wasm.d.ts`
-  );
-  fs.copyFileSync(
-    `src/solana/token/token_bridge_bg.wasm`,
-    `${buildPath}/solana/token/token_bridge_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/token-node/token_bridge_bg.wasm`,
-    `${buildPath}/solana/token-node/token_bridge_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/token/token_bridge_bg.wasm.d.ts`,
-    `${buildPath}/solana/token/token_bridge_bg.wasm.d.ts`
-  );
-  fs.copyFileSync(
-    `src/solana/token-node/token_bridge_bg.wasm.d.ts`,
-    `${buildPath}/solana/token-node/token_bridge_bg.wasm.d.ts`
-  );
-  fs.copyFileSync(
-    `src/solana/migration/wormhole_migration_bg.wasm`,
-    `${buildPath}/solana/migration/wormhole_migration_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/migration-node/wormhole_migration_bg.wasm`,
-    `${buildPath}/solana/migration-node/wormhole_migration_bg.wasm`
-  );
-  fs.copyFileSync(
-    `src/solana/migration/wormhole_migration_bg.wasm.d.ts`,
-    `${buildPath}/solana/migration/wormhole_migration_bg.wasm.d.ts`
-  );
-  fs.copyFileSync(
-    `src/solana/migration-node/wormhole_migration_bg.wasm.d.ts`,
-    `${buildPath}/solana/migration-node/wormhole_migration_bg.wasm.d.ts`
-  );
-});

+ 1 - 38
sdk/js/src/solana/wasm.ts

@@ -1,38 +1 @@
-const coreWasms = {
-  bundler: async () => await import("./core/bridge"),
-  node: async () => await import("./core-node/bridge"),
-};
-const migrationWasms = {
-  bundler: async () => await import("./migration/wormhole_migration"),
-  node: async () => await import("./migration-node/wormhole_migration"),
-};
-const nftWasms = {
-  bundler: async () => await import("./nft/nft_bridge"),
-  node: async () => await import("./nft-node/nft_bridge"),
-};
-const tokenWasms = {
-  bundler: async () => await import("./token/token_bridge"),
-  node: async () => await import("./token-node/token_bridge"),
-};
-let importDefaultCoreWasm = coreWasms.bundler;
-let importDefaultMigrationWasm = migrationWasms.bundler;
-let importDefaultNftWasm = nftWasms.bundler;
-let importDefaultTokenWasm = tokenWasms.bundler;
-export function setDefaultWasm(type: "bundler" | "node") {
-  importDefaultCoreWasm = coreWasms[type];
-  importDefaultMigrationWasm = migrationWasms[type];
-  importDefaultNftWasm = nftWasms[type];
-  importDefaultTokenWasm = tokenWasms[type];
-}
-export async function importCoreWasm() {
-  return await importDefaultCoreWasm();
-}
-export async function importMigrationWasm() {
-  return await importDefaultMigrationWasm();
-}
-export async function importNftWasm() {
-  return await importDefaultNftWasm();
-}
-export async function importTokenWasm() {
-  return await importDefaultTokenWasm();
-}
+export * from "@certusone/wormhole-sdk-wasm";

+ 9 - 9
solana/Dockerfile.wasm

@@ -73,12 +73,12 @@ RUN --mount=type=cache,target=/root/.cache \
 
 FROM scratch AS export
 
-COPY --from=build /usr/src/bridge/bridge/program/bundler sdk/js/src/solana/core
-COPY --from=build /usr/src/bridge/modules/token_bridge/program/bundler sdk/js/src/solana/token
-COPY --from=build /usr/src/bridge/migration/bundler sdk/js/src/solana/migration
-COPY --from=build /usr/src/bridge/modules/nft_bridge/program/bundler sdk/js/src/solana/nft
-
-COPY --from=build /usr/src/bridge/bridge/program/nodejs sdk/js/src/solana/core-node
-COPY --from=build /usr/src/bridge/modules/token_bridge/program/nodejs sdk/js/src/solana/token-node
-COPY --from=build /usr/src/bridge/migration/nodejs sdk/js/src/solana/migration-node
-COPY --from=build /usr/src/bridge/modules/nft_bridge/program/nodejs sdk/js/src/solana/nft-node
+COPY --from=build /usr/src/bridge/bridge/program/bundler sdk/js-wasm/src/core
+COPY --from=build /usr/src/bridge/modules/token_bridge/program/bundler sdk/js-wasm/src/token
+COPY --from=build /usr/src/bridge/migration/bundler sdk/js-wasm/src/migration
+COPY --from=build /usr/src/bridge/modules/nft_bridge/program/bundler sdk/js-wasm/src/nft
+
+COPY --from=build /usr/src/bridge/bridge/program/nodejs sdk/js-wasm/src/core-node
+COPY --from=build /usr/src/bridge/modules/token_bridge/program/nodejs sdk/js-wasm/src/token-node
+COPY --from=build /usr/src/bridge/migration/nodejs sdk/js-wasm/src/migration-node
+COPY --from=build /usr/src/bridge/modules/nft_bridge/program/nodejs sdk/js-wasm/src/nft-node