From 9445f1d466809251a587b81b58dd9d6e0e07642b Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Wed, 9 Aug 2023 18:18:17 -0500 Subject: [PATCH 01/44] build: add marshal snippet deps - modern marshal - @agoric/vats for makeFakeBoard --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b9b4f637e..b9c10387b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,10 @@ "homepage": "https://github.com/Agoric/documentation#readme", "dependencies": { "@agoric/zoe": "beta", - "@endo/marshal": "^0.6.3", + "@endo/far": "^0.2.19", + "@endo/marshal": "^0.8.6", + "@endo/patterns": "^0.2.3", + "@endo/pass-style": "^0.1.6", "typescript": "^4.0.3" }, "devDependencies": { @@ -46,6 +49,7 @@ "@agoric/ertp": "beta", "@agoric/notifier": "beta", "@agoric/solo": "beta", + "@agoric/vats": "beta", "@endo/bundle-source": "^2.1.1", "@endo/eventual-send": "^0.14.8", "@endo/init": "^0.5.43", From e997de36fc7c8c72b20f639dfeddb90409f53c8f Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Wed, 9 Aug 2023 18:18:39 -0500 Subject: [PATCH 02/44] build: lock packages with snippet deps --- yarn.lock | 2034 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 2008 insertions(+), 26 deletions(-) diff --git a/yarn.lock b/yarn.lock index ec5eadaf7..ed0bc8ab2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,11 +10,35 @@ "@agoric/assert" "^0.3.15" n-readlines "^1.0.0" +"@agoric/access-token@^0.4.21": + version "0.4.21" + resolved "https://registry.yarnpkg.com/@agoric/access-token/-/access-token-0.4.21.tgz#508101390377b05301d2c1657790a4ad8dc499e9" + integrity sha512-wnsH3K7psw+kHCNf5vSYdBpz2uqLVnLxBsEtq5mnCrTc8pO5O/653x1mGM02k6QNi02K9QjFnWsdCgXPaRgEuQ== + dependencies: + "@agoric/assert" "^0.6.0" + n-readlines "^1.0.0" + tmp "^0.2.1" + "@agoric/assert@^0.3.15", "@agoric/assert@beta": version "0.3.15" resolved "https://registry.yarnpkg.com/@agoric/assert/-/assert-0.3.15.tgz#149d120790b76bb79ca9a02f265d8e7a8a904a87" integrity sha512-6Kb0mtRoAd3O3VwnEXnGpy+ldqD+nB4OSZdgfKZkGn+apN9nLQP4OStEZKeG+jWsgBIzpNE61LrXv6HnBMCX+Q== +"@agoric/assert@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@agoric/assert/-/assert-0.4.0.tgz#144b0c93290bec2fb2c87da37d755d0e7d1a256e" + integrity sha512-KVAuDJPZ5B49S8LUGFgbsFEbr8KhR0REiqvxRUrlAJB1CVLbsIF/ywnz6XG1Bf8FSdFdxKtvlv8sK1aeM1B0jw== + +"@agoric/assert@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@agoric/assert/-/assert-0.5.1.tgz#f118129c3d091108528dec08a31f5f65c26de0c6" + integrity sha512-1BOAJ9rMgZejm3s/LEd5CDzSdTeF5TCV+5xZctjfkVsbmGpZ/+B0ip1COYGZQ+XrVnkJuux60L3Ux9LwPIZgRg== + +"@agoric/assert@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@agoric/assert/-/assert-0.6.0.tgz#43ede53cf0943f3e9038f597f776e52500446e41" + integrity sha512-bpY9ul5egbVlmdf9RtDfxh1WQaDSOCzqcAxyqE771rbkv+QYs46oZc4oUVHi7wt3g5LVXj/JsKgLkJEKpEl1BA== + "@agoric/babel-generator@^7.17.4", "@agoric/babel-generator@^7.17.6": version "7.17.6" resolved "https://registry.yarnpkg.com/@agoric/babel-generator/-/babel-generator-7.17.6.tgz#75ff4629468a481d670b4154bcfade11af6de674" @@ -46,6 +70,18 @@ rollup "^2.47.0" source-map "^0.7.3" +"@agoric/cache@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@agoric/cache/-/cache-0.3.2.tgz#19c3576b72084c3b2409fa4b2fd8f534531c0788" + integrity sha512-cFLMiY9OI2Xp7aOAlAmZF/4H6rwaxhtzCfOJ8UiMIKE+4JXkhMLO2FtvGBUWFw40/Q9JsWRWziPs7otuFVQ6Ng== + dependencies: + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/store" "^0.9.2" + "@agoric/vat-data" "^0.5.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@agoric/captp@^1.10.8": version "1.10.8" resolved "https://registry.yarnpkg.com/@agoric/captp/-/captp-1.10.8.tgz#c823f4edbe4c3acd80b6cfd87dbb42a5bf463138" @@ -57,6 +93,33 @@ "@agoric/nat" "^4.1.0" "@agoric/promise-kit" "^0.2.29" +"@agoric/casting@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@agoric/casting/-/casting-0.4.2.tgz#2d89cd3fcb312ed56ba67ca3e301dc043ff224d5" + integrity sha512-TiCG7hIg9Wp8Ud0PF7XSrTlqQWdczDac7QdSUWuBDodrlk3qw/5Ktcb5BoD0vFyARNZsB9PZq0cBRNYtjHj/Bg== + dependencies: + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/spawner" "^0.6.8" + "@agoric/store" "^0.9.2" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/proto-signing" "^0.30.1" + "@cosmjs/stargate" "^0.30.1" + "@cosmjs/tendermint-rpc" "^0.30.1" + "@endo/far" "^0.2.18" + "@endo/init" "^0.5.56" + "@endo/lockdown" "^0.1.28" + "@endo/marshal" "^0.8.5" + "@endo/promise-kit" "^0.2.56" + node-fetch "^2.6.0" + +"@agoric/cosmic-proto@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@agoric/cosmic-proto/-/cosmic-proto-0.3.0.tgz#c9d31d3946c91fbb1630f89d8ba63a662bcdacc5" + integrity sha512-cIunby6gs53sGkHx3ALraREbfVQXvsIcObMjQQ0/tZt5HVqwoS7Y1Qj1Xl0ZZvqE8B1Zyk7QMDj829mbTII+9g== + dependencies: + protobufjs "^7.0.0" + "@agoric/cosmic-swingset@^0.34.4", "@agoric/cosmic-swingset@beta": version "0.34.4" resolved "https://registry.yarnpkg.com/@agoric/cosmic-swingset/-/cosmic-swingset-0.34.4.tgz#606c67803a25cb194474da1294212c5705a574e7" @@ -123,6 +186,37 @@ "@agoric/same-structure" "^0.1.29" "@agoric/store" "^0.6.8" +"@agoric/ertp@^0.14.2": + version "0.14.2" + resolved "https://registry.yarnpkg.com/@agoric/ertp/-/ertp-0.14.2.tgz#7c1df4efa402eda4ec8286cf6b659129e5b91aaa" + integrity sha512-0/6rW5mT952+MmL+9p+wdvtF3GkHMokQ7S0e+qOtzIDhdfM+5Yn7F5PsUMGnRHMyWEeL9MBSfDBUFJ4Z0sELow== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/nat" "^4.1.0" + "@agoric/notifier" "^0.4.0" + "@agoric/store" "^0.7.2" + "@agoric/swingset-vat" "^0.28.0" + "@agoric/vat-data" "^0.3.1" + "@endo/eventual-send" "^0.15.3" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + +"@agoric/ertp@^0.16.2": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@agoric/ertp/-/ertp-0.16.2.tgz#0e41ffb80a635af9729c65cbcd6158abbf16b83e" + integrity sha512-4+CbrkWw2dCYlVAYH+31jFMlwWqw29bak+Rg6qkMuCAp5BpxyBc4DthdovOjwwOBqkBd3QBKrnvkoD9Ltc3YHQ== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/notifier" "^0.6.2" + "@agoric/store" "^0.9.2" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/vat-data" "^0.5.2" + "@endo/eventual-send" "^0.17.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/promise-kit" "^0.2.56" + "@agoric/eventual-send@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@agoric/eventual-send/-/eventual-send-0.14.0.tgz#72412cc5d84dcac78077f92a43d5bd58401e3938" @@ -136,6 +230,28 @@ "@agoric/eventual-send" "^0.14.0" "@agoric/marshal" "^0.5.0" +"@agoric/governance@^0.10.3": + version "0.10.3" + resolved "https://registry.yarnpkg.com/@agoric/governance/-/governance-0.10.3.tgz#d930b3da8c8e6362ddcbd8c7ac2ec3f090c57f1d" + integrity sha512-DmaZAJ7u5Tpsh3GscqLkxkZfVl5qg6fD905gdKx/b5xahzF65KIcOz48qUVFqZm/l4N4n1TzIazeAApsLpD7Pw== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/ertp" "^0.16.2" + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/store" "^0.9.2" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/time" "^0.3.2" + "@agoric/vat-data" "^0.5.2" + "@agoric/vats" "^0.15.1" + "@agoric/zoe" "^0.26.2" + "@endo/captp" "^3.1.1" + "@endo/eventual-send" "^0.17.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/promise-kit" "^0.2.56" + "@agoric/governance@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@agoric/governance/-/governance-0.4.1.tgz#439fa45c205103bedf5ca1bd97e6ddcb34f23b3f" @@ -153,6 +269,23 @@ "@agoric/store" "^0.6.8" "@agoric/zoe" "^0.21.1" +"@agoric/governance@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@agoric/governance/-/governance-0.7.0.tgz#15ee226b4ee27a3dbf4f9b02c4b5fe74aca1d902" + integrity sha512-46lMphbXPl47CNwFqgLXFyI9L716dbl0IvdufxixUYv5K308iVydiZhaFOgGgRQY+oRJ7oTHekPDO78GVlPOCw== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/ertp" "^0.14.2" + "@agoric/nat" "^4.1.0" + "@agoric/notifier" "^0.4.0" + "@agoric/store" "^0.7.2" + "@agoric/zoe" "^0.24.0" + "@endo/captp" "^2.0.7" + "@endo/eventual-send" "^0.15.3" + "@endo/far" "^0.2.3" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + "@agoric/import-bundle@^0.2.33": version "0.2.33" resolved "https://registry.yarnpkg.com/@agoric/import-bundle/-/import-bundle-0.2.33.tgz#beb5b086842275c7da88321cb836cbd898ca4011" @@ -172,6 +305,43 @@ resolved "https://registry.yarnpkg.com/@agoric/install-ses/-/install-ses-0.5.29.tgz#605b599cc47c6a3f33a0f9bfeece3e6c04e7e8c4" integrity sha512-l7feHQQyYz4YAakuf4KnAmGoDIVPXUncDwHckhMlvu5850I1sbBMjibuKuz4ypAf91FX7eK5flVolgWYA7V2eg== +"@agoric/inter-protocol@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@agoric/inter-protocol/-/inter-protocol-0.16.1.tgz#ace188e046bb63b0afd2d79065671d26dab53868" + integrity sha512-1SJLBpeLsgXdJEK4CjzQ2QgLgCJg+OJv8M3dKy9MDMK+ajhQRCB2ySQtGbS9KXgwdpj4FFudKb0/+QaGhgfukg== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/ertp" "^0.16.2" + "@agoric/governance" "^0.10.3" + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/store" "^0.9.2" + "@agoric/time" "^0.3.2" + "@agoric/vat-data" "^0.5.2" + "@agoric/vats" "^0.15.1" + "@agoric/zoe" "^0.26.2" + "@endo/captp" "^3.1.1" + "@endo/eventual-send" "^0.17.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + agoric "^0.21.1" + jessie.js "^0.3.2" + +"@agoric/internal@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@agoric/internal/-/internal-0.3.2.tgz#a1242947083ab46cbd34613add8bacbd0c9dc443" + integrity sha512-iCgZE2NabhDKBJ+EfTeVqWUcoNvgxNfnw/dMF57yKnRn3E9iOqt7Iyx+DloTGBu5a1ZyywdQo4G2cFWrMX3Q7g== + dependencies: + "@agoric/zone" "^0.2.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@endo/patterns" "^0.2.2" + "@endo/promise-kit" "^0.2.56" + "@endo/stream" "^0.3.25" + anylogger "^0.21.0" + jessie.js "^0.3.2" + "@agoric/marshal@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@agoric/marshal/-/marshal-0.5.0.tgz#f3beb3d53b99c0198cd8df4b5cd97a4ba2c468c3" @@ -197,6 +367,31 @@ "@agoric/marshal" "^0.5.0" "@agoric/promise-kit" "^0.2.29" +"@agoric/notifier@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@agoric/notifier/-/notifier-0.4.0.tgz#1958f7fe105d95c0a338ed5a3ad25e891e6f37b6" + integrity sha512-4FtawDGpUhifczOwG4+z+yg3R5HfupLgUS8G+T8a5efe42y/z9CzaOeSn/1vvD9CX1M7Y/RKsZB21MLlee3+Cw== + dependencies: + "@agoric/assert" "^0.4.0" + "@endo/eventual-send" "^0.15.3" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + +"@agoric/notifier@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@agoric/notifier/-/notifier-0.6.2.tgz#d32404671a042267321ef5df7cf5ce0f16d3e777" + integrity sha512-2Hi8u2TXtsk9Ix0L8xfRMGut1c+w7jiM8Wt4Ys2bgfI/ybdJ4FtDIBvHF1hFU0rSbhUicuKAN85Sok+MkDNcug== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/internal" "^0.3.2" + "@agoric/store" "^0.9.2" + "@agoric/swing-store" "^0.9.1" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/vat-data" "^0.5.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@endo/promise-kit" "^0.2.56" + "@agoric/pegasus@^0.5.1": version "0.5.1" resolved "https://registry.yarnpkg.com/@agoric/pegasus/-/pegasus-0.5.1.tgz#38b8bbd27cc1eef237a387a1e524e543618a156c" @@ -218,6 +413,26 @@ "@agoric/vats" "^0.5.1" "@agoric/zoe" "^0.21.1" +"@agoric/pegasus@^0.7.2": + version "0.7.12" + resolved "https://registry.yarnpkg.com/@agoric/pegasus/-/pegasus-0.7.12.tgz#277cea70db3f4896639c72e7e622fbacda62c0c3" + integrity sha512-yjAvr12tYff26CUOD8zX9r320eiTLMR83JQZBM7BGP4TG5I3Nt75Zqo0OmC2wweESdzPiG4C3bUdk0SldwnJFg== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/ertp" "^0.16.2" + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/store" "^0.9.2" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/vats" "^0.15.1" + "@agoric/zoe" "^0.26.2" + "@endo/bundle-source" "^2.5.1" + "@endo/captp" "^3.1.1" + "@endo/far" "^0.2.18" + "@endo/init" "^0.5.56" + "@endo/nat" "^4.1.27" + "@endo/promise-kit" "^0.2.56" + "@agoric/promise-kit@^0.2.29": version "0.2.29" resolved "https://registry.yarnpkg.com/@agoric/promise-kit/-/promise-kit-0.2.29.tgz#fcbbf68835808e613bf356b38ea21421eb309701" @@ -225,6 +440,29 @@ dependencies: "@agoric/eventual-send" "^0.14.0" +"@agoric/run-protocol@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@agoric/run-protocol/-/run-protocol-0.11.0.tgz#936891969731461ce2b7d8fbf1b9a2abd5244a94" + integrity sha512-ouTg18F/LX4NEyDFtLzDHY8s99wXQb4ae9RrfHhqFzTZp6PtFe7AvKnr81lnH8wFaOtWP+lRflhA04sWkxRKCw== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/ertp" "^0.14.2" + "@agoric/governance" "^0.7.0" + "@agoric/nat" "^4.1.0" + "@agoric/notifier" "^0.4.0" + "@agoric/store" "^0.7.2" + "@agoric/swingset-vat" "^0.28.0" + "@agoric/vat-data" "^0.3.1" + "@agoric/vats" "^0.10.0" + "@agoric/zoe" "^0.24.0" + "@endo/bundle-source" "^2.2.0" + "@endo/captp" "^2.0.7" + "@endo/eventual-send" "^0.15.3" + "@endo/far" "^0.2.3" + "@endo/marshal" "^0.6.7" + "@endo/nat" "^4.1.12" + "@endo/promise-kit" "^0.2.41" + "@agoric/same-structure@^0.1.29": version "0.1.29" resolved "https://registry.yarnpkg.com/@agoric/same-structure/-/same-structure-0.1.29.tgz#1b2a86aadb93ba4ef0f0bc05f014198783e9854f" @@ -241,6 +479,35 @@ "@agoric/assert" "^0.3.15" "@agoric/marshal" "^0.5.0" +"@agoric/sharing-service@^0.2.11", "@agoric/sharing-service@^0.2.2": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@agoric/sharing-service/-/sharing-service-0.2.11.tgz#ff7714f10bb7038e8ebfc51c06ffe0472f2caaa1" + integrity sha512-xYLxjjDcd7T0zN5Bu67JvC0WiL7CIoEKm4NAvYS5RjwCqkDjhi+QoVjnq8EskhzWU+BOnjJdtmhjNAlptSnk4Q== + dependencies: + "@agoric/assert" "^0.6.0" + "@endo/marshal" "^0.8.5" + +"@agoric/smart-wallet@^0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@agoric/smart-wallet/-/smart-wallet-0.5.3.tgz#a58f31d71e547bdb6d8944162d455f5ce6b16b1e" + integrity sha512-2L7sHmUL/BINuuHv+6A1kYLjidqCNJ2V3GqXm3R6oTeFtzscSzOo3LeOoQ2uPridkZ+fTXxinNfpJ/gRu2pl7g== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/casting" "^0.4.2" + "@agoric/ertp" "^0.16.2" + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/store" "^0.9.2" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/vat-data" "^0.5.2" + "@agoric/vats" "^0.15.1" + "@agoric/zoe" "^0.26.2" + "@endo/eventual-send" "^0.17.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/promise-kit" "^0.2.56" + "@agoric/solo@beta": version "0.5.4" resolved "https://registry.yarnpkg.com/@agoric/solo/-/solo-0.5.4.tgz#a774b063b2fe631b3c6b452b684a3eeb02267cfe" @@ -291,6 +558,16 @@ "@agoric/import-bundle" "^0.2.33" "@agoric/marshal" "^0.5.0" +"@agoric/spawner@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@agoric/spawner/-/spawner-0.6.8.tgz#81acb8120c58bbf9df61353a24835e143c3cef77" + integrity sha512-n/vjSr2cU3qyla8dJlCYVqkPnVsRHZE2h6dYy8yG0UZm2AUZju5m4bwj5gm8y+g8zO8Dzmfk0GGIyy9hamS7Uw== + dependencies: + "@agoric/assert" "^0.6.0" + "@endo/eventual-send" "^0.17.2" + "@endo/import-bundle" "^0.3.4" + "@endo/marshal" "^0.8.5" + "@agoric/store@^0.6.8": version "0.6.8" resolved "https://registry.yarnpkg.com/@agoric/store/-/store-0.6.8.tgz#c92d59c725253dff1ef4aacec29b8b32d7fb9302" @@ -299,6 +576,32 @@ "@agoric/assert" "^0.3.15" "@agoric/marshal" "^0.5.0" +"@agoric/store@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@agoric/store/-/store-0.7.2.tgz#528b00ec766e27785cb0013ba1aefcc9a5191ca3" + integrity sha512-38NIoQ3HOFgagAt1SNLThkcwH4XlcFZ0VOWGA9TgqcWGDgPF8UtC0OLJZM6Qf1aHiSkSYQaXEbrosymWA4n+JA== + dependencies: + "@agoric/assert" "^0.4.0" + "@endo/eventual-send" "^0.15.3" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + +"@agoric/store@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@agoric/store/-/store-0.9.2.tgz#0973e57b8811a70923c141fccfb002bbad8fed4b" + integrity sha512-9YtBlQG1cO7COfprPqBUYDW1Jg805Ick1RHm8Etj5VyfkhF8emhv/OqJKi4FMlA3XDVL3Yvbptrjvdo1WjCvjg== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/internal" "^0.3.2" + "@endo/eventual-send" "^0.17.2" + "@endo/exo" "^0.2.2" + "@endo/far" "^0.2.18" + "@endo/marshal" "^0.8.5" + "@endo/pass-style" "^0.1.3" + "@endo/patterns" "^0.2.2" + "@endo/promise-kit" "^0.2.56" + "@fast-check/ava" "^1.1.3" + "@agoric/swing-store@^0.6.3": version "0.6.3" resolved "https://registry.yarnpkg.com/@agoric/swing-store/-/swing-store-0.6.3.tgz#6f9e6b3a43f27b8ff10f22c10a56a1cf9dd58dd9" @@ -309,6 +612,47 @@ node-lmdb "^0.9.5" tmp "^0.2.1" +"@agoric/swing-store@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@agoric/swing-store/-/swing-store-0.7.0.tgz#8029d41d6f3eb56b9900bca0c2a1c9266a630e17" + integrity sha512-DNlC7CGeIHBZI3XGuVxo2PHmFNCFXTyIpFCvO6HFkCKEN3BsGxxlFlEnMuC6MQ3PcFjoaaeyl2judrEkDzlgew== + dependencies: + "@agoric/assert" "^0.4.0" + better-sqlite3 "^7.5.0" + node-lmdb "^0.9.5" + tmp "^0.2.1" + +"@agoric/swing-store@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@agoric/swing-store/-/swing-store-0.9.1.tgz#0ed85beac7a7cd2e8e7507ea58e50eecb08a203e" + integrity sha512-GRgXOJwEnFSX3gY2sOhHs1yO503ltUVjslSeSWFHd8bmrPs11igIYRES7Vx4lOSQuNmGe5mKFhgfDnoHPmKxjQ== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/internal" "^0.3.2" + "@endo/base64" "^0.2.31" + "@endo/bundle-source" "^2.5.1" + "@endo/check-bundle" "^0.2.18" + "@endo/nat" "^4.1.27" + better-sqlite3 "^8.2.0" + +"@agoric/swingset-liveslots@^0.10.2": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@agoric/swingset-liveslots/-/swingset-liveslots-0.10.2.tgz#a8d18f32ff7a611b9945f4ff920b00b9e2801e08" + integrity sha512-jp05WNHEUH5K8MgiIoHhNrWu7ozKqStyIe0Ex6ejSInFFo/NhJLVL7QLyUgRjD74RbUSuvbR8v8PaQ/pslVI0Q== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/internal" "^0.3.2" + "@agoric/store" "^0.9.2" + "@agoric/vat-data" "^0.5.2" + "@endo/eventual-send" "^0.17.2" + "@endo/exo" "^0.2.2" + "@endo/init" "^0.5.56" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/pass-style" "^0.1.3" + "@endo/patterns" "^0.2.2" + "@endo/promise-kit" "^0.2.56" + "@agoric/swingset-vat@^0.24.1": version "0.24.1" resolved "https://registry.yarnpkg.com/@agoric/swingset-vat/-/swingset-vat-0.24.1.tgz#38975bc4b8d161b47ba7946c5282ea47e1247530" @@ -333,6 +677,82 @@ node-lmdb "^0.9.5" semver "^6.3.0" +"@agoric/swingset-vat@^0.28.0": + version "0.28.0" + resolved "https://registry.yarnpkg.com/@agoric/swingset-vat/-/swingset-vat-0.28.0.tgz#fc53271c93acb64d9d791f66af1a3dbd5c4ebdb7" + integrity sha512-Wfs3iQYvy7VFPcwti1SxuI5Upb815uOrJBAP+CH7vTMGbTU6T+1FlZbBICdBcV9qc7NjhCggiGLt6Mmwuk+AUA== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/nat" "^4.1.0" + "@agoric/notifier" "^0.4.0" + "@agoric/store" "^0.7.2" + "@agoric/swing-store" "^0.7.0" + "@agoric/xsnap" "^0.13.0" + "@endo/base64" "^0.2.25" + "@endo/bundle-source" "^2.2.0" + "@endo/captp" "^2.0.7" + "@endo/check-bundle" "^0.2.3" + "@endo/compartment-mapper" "^0.7.5" + "@endo/eventual-send" "^0.15.3" + "@endo/import-bundle" "^0.2.45" + "@endo/init" "^0.5.41" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + "@endo/zip" "^0.2.25" + anylogger "^0.21.0" + import-meta-resolve "^1.1.1" + node-lmdb "^0.9.5" + semver "^6.3.0" + +"@agoric/swingset-vat@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@agoric/swingset-vat/-/swingset-vat-0.32.2.tgz#5228855132ab2701223316d86eeaef410ec6b4b6" + integrity sha512-aYIhyYCuI7Oi47DBqn8wqMFnQOeOxSB7GU69wOQcQIoJVWRhOECDuFzoEqdV6G8xwGIsGpX/fMtXT9A1YAy6ZA== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/internal" "^0.3.2" + "@agoric/store" "^0.9.2" + "@agoric/swing-store" "^0.9.1" + "@agoric/swingset-liveslots" "^0.10.2" + "@agoric/swingset-xsnap-supervisor" "^0.10.2" + "@agoric/time" "^0.3.2" + "@agoric/vat-data" "^0.5.2" + "@agoric/xsnap" "^0.14.2" + "@agoric/xsnap-lockdown" "^0.14.0" + "@endo/base64" "^0.2.31" + "@endo/bundle-source" "^2.5.1" + "@endo/captp" "^3.1.1" + "@endo/check-bundle" "^0.2.18" + "@endo/compartment-mapper" "^0.8.4" + "@endo/eventual-send" "^0.17.2" + "@endo/far" "^0.2.18" + "@endo/import-bundle" "^0.3.4" + "@endo/init" "^0.5.56" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/promise-kit" "^0.2.56" + "@endo/zip" "^0.2.31" + ansi-styles "^6.2.1" + anylogger "^0.21.0" + import-meta-resolve "^2.2.1" + microtime "^3.1.0" + semver "^6.3.0" + tmp "^0.2.1" + +"@agoric/swingset-xsnap-supervisor@^0.10.2": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@agoric/swingset-xsnap-supervisor/-/swingset-xsnap-supervisor-0.10.2.tgz#09f067695b0ea6ebfeb6ea200cc7f1675f0f8939" + integrity sha512-3PB15aiNHfjTYmtUz9Rxmm6qSHnoO5w5dygRzjx2ytk8yoNn/ZOpxlIOLonhD8kwOaEli5D7btY9OA3jf+Sm6w== + +"@agoric/time@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@agoric/time/-/time-0.3.2.tgz#9231eec197e10b52a9f416ec2afe929b67f7165c" + integrity sha512-qRgvfD/gQJNQaWk0uQqPhq0IGbIABz1z6oFtAhGkylU6zNO/no6VpJG4gw5YwEO8mIAJVOM5HE3qL53AaENYkw== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/store" "^0.9.2" + "@endo/nat" "^4.1.27" + "@agoric/treasury@^0.7.1": version "0.7.1" resolved "https://registry.yarnpkg.com/@agoric/treasury/-/treasury-0.7.1.tgz#8c12b7fb1fb92d6dbc253459f76e28f9a9c619f9" @@ -355,6 +775,72 @@ "@agoric/swingset-vat" "^0.24.1" "@agoric/zoe" "^0.21.1" +"@agoric/vat-data@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@agoric/vat-data/-/vat-data-0.3.1.tgz#b551f50fbd9cfef6f1d6fc28eeb807ced99fe870" + integrity sha512-ZStdlpQUPFc4nGFjJ3saODtY1W7qgQmeaSXu1EIS05Bh6cD+25so3XB4pvB5fPyQWnD6xeMvCOlLcVgxjo3HgQ== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/store" "^0.7.2" + +"@agoric/vat-data@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@agoric/vat-data/-/vat-data-0.5.2.tgz#abafab83279552466cf4ca946faa175a0a1423dc" + integrity sha512-j71bSl7oPcWikR4bP15KMu67D3BLGLhEOcqgewC1cArcE99rhxDU19ALN0OITD0F0KkNCahRNifoIr73n/fBng== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/internal" "^0.3.2" + "@agoric/store" "^0.9.2" + +"@agoric/vats@^0.10.0", "@agoric/vats@beta": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@agoric/vats/-/vats-0.10.0.tgz#c6d031e2c9f99e5867ba1387b1d385f54bc3b6fc" + integrity sha512-KBaHiFaDBO4coFOYaTEEqKSCmpSUNZ8c4vNMokEx9WeYNkdHKFgdcmYLvFKuKBL7Rzp5w2m0kcAv7S2GMeY12Q== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/ertp" "^0.14.2" + "@agoric/governance" "^0.7.0" + "@agoric/nat" "^4.1.0" + "@agoric/notifier" "^0.4.0" + "@agoric/pegasus" "^0.7.2" + "@agoric/run-protocol" "^0.11.0" + "@agoric/sharing-service" "^0.2.2" + "@agoric/store" "^0.7.2" + "@agoric/swingset-vat" "^0.28.0" + "@agoric/wallet-backend" "^0.12.1" + "@agoric/zoe" "^0.24.0" + "@endo/far" "^0.2.3" + "@endo/import-bundle" "^0.2.45" + "@endo/init" "^0.5.41" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + +"@agoric/vats@^0.15.1": + version "0.15.1" + resolved "https://registry.yarnpkg.com/@agoric/vats/-/vats-0.15.1.tgz#95d43742d5375b2c0718b5f899fb7eb87aaa3b7b" + integrity sha512-uYV+f3+RJ/KM9O5+7HcsGqLfvhtj9V1e7u1y8TZeTs2zJXVRVuGi/xQaMSGwf3CBBgBtyj8hFUCCYCeHxB1qRQ== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/ertp" "^0.16.2" + "@agoric/governance" "^0.10.3" + "@agoric/inter-protocol" "^0.16.1" + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/sharing-service" "^0.2.11" + "@agoric/store" "^0.9.2" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/time" "^0.3.2" + "@agoric/vat-data" "^0.5.2" + "@agoric/zoe" "^0.26.2" + "@agoric/zone" "^0.2.2" + "@endo/far" "^0.2.18" + "@endo/import-bundle" "^0.3.4" + "@endo/init" "^0.5.56" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/promise-kit" "^0.2.56" + jessie.js "^0.3.2" + "@agoric/vats@^0.5.1": version "0.5.1" resolved "https://registry.yarnpkg.com/@agoric/vats/-/vats-0.5.1.tgz#780e768b08e0365b075df58943de6b02d8505d17" @@ -394,6 +880,23 @@ "@agoric/zoe" "^0.21.1" import-meta-resolve "^1.1.1" +"@agoric/wallet-backend@^0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@agoric/wallet-backend/-/wallet-backend-0.12.1.tgz#c89b02cb9f2796f92a9466039649381efccad9d5" + integrity sha512-B9B4n1pibPxduGX2sUpzPMQlTFk/5BPO+yRLoWqJfhzIZCEy0ICGWs7kNas7iktsfCioKl7+cGi9iGwEk+LLLQ== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/ertp" "^0.14.2" + "@agoric/nat" "^4.1.0" + "@agoric/notifier" "^0.4.0" + "@agoric/run-protocol" "^0.11.0" + "@agoric/store" "^0.7.2" + "@agoric/zoe" "^0.24.0" + "@endo/eventual-send" "^0.15.3" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + import-meta-resolve "^1.1.1" + "@agoric/wallet@^0.11.7": version "0.11.7" resolved "https://registry.yarnpkg.com/@agoric/wallet/-/wallet-0.11.7.tgz#902d90ae1a6aa4d09160b2683a548a6d72b5a4e7" @@ -404,6 +907,11 @@ eslint-plugin-eslint-comments "^3.1.2" import-meta-resolve "^1.1.1" +"@agoric/xsnap-lockdown@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@agoric/xsnap-lockdown/-/xsnap-lockdown-0.14.0.tgz#0c605bbd08e6ccf1954a615dbce7d4c0fe578a32" + integrity sha512-T8kYrW1baTDQTkQJ9mDp1ME2Ive3RNNRFU7PXuu60Pu9A/tWliYKiJWwqcGhYAQOkHxxFz0BVwk9Jf8HErzgRA== + "@agoric/xsnap@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@agoric/xsnap/-/xsnap-0.11.0.tgz#6b07b3d6ce2a3e3ed4cd4e00af1b957d614077d5" @@ -417,6 +925,40 @@ "@endo/netstring" "^0.2.8" glob "^7.1.6" +"@agoric/xsnap@^0.13.0": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@agoric/xsnap/-/xsnap-0.13.3.tgz#a6d97728b02a4981ac89920dba0dd2a3ab4a9e83" + integrity sha512-Fpq5vP3JLDCeIrstTjl/Yp3hPzW37KpQw3cE+ma3LEe2z2sepc71cMgSTX09nps527lHbQusjitDb4xbn4QGjw== + dependencies: + "@agoric/assert" "^0.5.1" + "@endo/bundle-source" "^2.3.1" + "@endo/eventual-send" "^0.16.5" + "@endo/init" "^0.5.49" + "@endo/netstring" "^0.3.19" + "@endo/promise-kit" "^0.2.49" + "@endo/stream" "^0.3.18" + "@endo/stream-node" "^0.2.19" + glob "^7.1.6" + rollup-plugin-string "^3.0.0" + +"@agoric/xsnap@^0.14.2": + version "0.14.2" + resolved "https://registry.yarnpkg.com/@agoric/xsnap/-/xsnap-0.14.2.tgz#0685b1c85af986edc3e5f226fd4e96c44df32bf0" + integrity sha512-bA4IZJixw8uCcDBqA9KUKEnxjB65pdkWb5xL0a4XM//QvIzYmB6EGJ80U+pbMOrjGtomUqo0Oxdc5X/PhAniSg== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/internal" "^0.3.2" + "@agoric/xsnap-lockdown" "^0.14.0" + "@endo/bundle-source" "^2.5.1" + "@endo/eventual-send" "^0.17.2" + "@endo/init" "^0.5.56" + "@endo/netstring" "^0.3.26" + "@endo/promise-kit" "^0.2.56" + "@endo/stream" "^0.3.25" + "@endo/stream-node" "^0.2.26" + glob "^7.1.6" + tmp "^0.2.1" + "@agoric/zoe@^0.21.1", "@agoric/zoe@beta": version "0.21.1" resolved "https://registry.yarnpkg.com/@agoric/zoe/-/zoe-0.21.1.tgz#f778e8659069e42c376281b1f203689ed7ba5763" @@ -437,6 +979,57 @@ "@agoric/store" "^0.6.8" "@agoric/swingset-vat" "^0.24.1" +"@agoric/zoe@^0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@agoric/zoe/-/zoe-0.24.0.tgz#383695c6a70dc6ef77b12bbd858567ed2f6bce6a" + integrity sha512-kT7cDDn2Tvfd1P0Pk+FIcrg2BdzLF9VnQ0hfxHIAQrCN68tHIAPrt9wW3R8T8H1HA6t9bC0CqQGQEo8BrDKblw== + dependencies: + "@agoric/assert" "^0.4.0" + "@agoric/ertp" "^0.14.2" + "@agoric/nat" "^4.1.0" + "@agoric/notifier" "^0.4.0" + "@agoric/store" "^0.7.2" + "@agoric/swingset-vat" "^0.28.0" + "@agoric/vat-data" "^0.3.1" + "@endo/bundle-source" "^2.2.0" + "@endo/eventual-send" "^0.15.3" + "@endo/far" "^0.2.3" + "@endo/import-bundle" "^0.2.45" + "@endo/marshal" "^0.6.7" + "@endo/promise-kit" "^0.2.41" + +"@agoric/zoe@^0.26.2": + version "0.26.2" + resolved "https://registry.yarnpkg.com/@agoric/zoe/-/zoe-0.26.2.tgz#c6cd260171a4c0307e160b93ae9f6ce29a675d70" + integrity sha512-xFZQ0Rz4UmHNWCUeLWFqtGgKNBPVvfb5IEmh+nSnbgJK45Y4Kcci77XkciO//e6xQo8dacrNhTELke3iAEISAA== + dependencies: + "@agoric/assert" "^0.6.0" + "@agoric/ertp" "^0.16.2" + "@agoric/internal" "^0.3.2" + "@agoric/notifier" "^0.6.2" + "@agoric/store" "^0.9.2" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/time" "^0.3.2" + "@agoric/vat-data" "^0.5.2" + "@endo/bundle-source" "^2.5.1" + "@endo/captp" "^3.1.1" + "@endo/eventual-send" "^0.17.2" + "@endo/far" "^0.2.18" + "@endo/import-bundle" "^0.3.4" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/patterns" "^0.2.2" + "@endo/promise-kit" "^0.2.56" + +"@agoric/zone@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@agoric/zone/-/zone-0.2.2.tgz#df5cc091d4a83842b87888e74159a723a424a82e" + integrity sha512-joVRnwH55xOeaoO2xYd1TWXXLPQ9pAeNsaiwTjO3FufYb/q55rv9mpYdUdhEy+zYQuFpPH87+6w/o3f/0AXrDQ== + dependencies: + "@agoric/store" "^0.9.2" + "@agoric/vat-data" "^0.5.2" + "@endo/far" "^0.2.18" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -1358,11 +1951,251 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@confio/ics23@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@confio/ics23/-/ics23-0.6.8.tgz#2a6b4f1f2b7b20a35d9a0745bb5a446e72930b3d" + integrity sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w== + dependencies: + "@noble/hashes" "^1.0.0" + protobufjs "^6.8.8" + +"@confio/relayer@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@confio/relayer/-/relayer-0.9.0.tgz#d0f9917f2a1b02e15d33dacb3e044d358022a9a9" + integrity sha512-YfoPMCH72BM/bYQ58+F75zYsZ2vEPocY0CaQLE6PPDtBOKrdXM3LTj5zUdZSbHDQSrDDmRrKcuZVufpdrRimQw== + dependencies: + "@cosmjs/cosmwasm-stargate" "^0.30.0" + "@cosmjs/crypto" "^0.30.0" + "@cosmjs/encoding" "^0.30.0" + "@cosmjs/faucet-client" "^0.30.0" + "@cosmjs/math" "^0.30.0" + "@cosmjs/proto-signing" "^0.30.0" + "@cosmjs/stargate" "^0.30.0" + "@cosmjs/stream" "^0.30.0" + "@cosmjs/tendermint-rpc" "^0.30.0" + "@cosmjs/utils" "^0.30.0" + ajv "7.1.1" + axios "0.21.4" + commander "7.1.0" + cosmjs-types "^0.7.1" + fast-safe-stringify "2.0.4" + js-yaml "4.0.0" + lodash "4.17.21" + prom-client "13.1.0" + protobufjs "^6.10.3" + table "^6.7.1" + triple-beam "1.3.0" + winston "3.3.3" + +"@cosmjs/amino@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.30.1.tgz#7c18c14627361ba6c88e3495700ceea1f76baace" + integrity sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w== + dependencies: + "@cosmjs/crypto" "^0.30.1" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + +"@cosmjs/cosmwasm-stargate@^0.30.0": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.30.1.tgz#6f9ca310f75433a3e30d683bc6aa24eadb345d79" + integrity sha512-W/6SLUCJAJGBN+sJLXouLZikVgmqDd9LCdlMzQaxczcCHTWeJAmRvOiZGSZaSy3shw/JN1qc6g6PKpvTVgj10A== + dependencies: + "@cosmjs/amino" "^0.30.1" + "@cosmjs/crypto" "^0.30.1" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/proto-signing" "^0.30.1" + "@cosmjs/stargate" "^0.30.1" + "@cosmjs/tendermint-rpc" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + cosmjs-types "^0.7.1" + long "^4.0.0" + pako "^2.0.2" + +"@cosmjs/crypto@^0.30.0", "@cosmjs/crypto@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.30.1.tgz#21e94d5ca8f8ded16eee1389d2639cb5c43c3eb5" + integrity sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ== + dependencies: + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + "@noble/hashes" "^1" + bn.js "^5.2.0" + elliptic "^6.5.4" + libsodium-wrappers "^0.7.6" + +"@cosmjs/encoding@^0.30.0", "@cosmjs/encoding@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.30.1.tgz#b5c4e0ef7ceb1f2753688eb96400ed70f35c6058" + integrity sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ== + dependencies: + base64-js "^1.3.0" + bech32 "^1.1.4" + readonly-date "^1.0.0" + +"@cosmjs/faucet-client@^0.30.0": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/faucet-client/-/faucet-client-0.30.1.tgz#81406128830ba47ae824a912144a28a7fe70300d" + integrity sha512-uOYIjouOCjncfthDzeygcWtEpShiNN0u9tORSingufOAO/kmlHwM53M5I1a8ak1EktkEEa+Mxdj3kRfV87DOcw== + dependencies: + axios "^0.21.2" + +"@cosmjs/json-rpc@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz#16f21305fc167598c8a23a45549b85106b2372bc" + integrity sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ== + dependencies: + "@cosmjs/stream" "^0.30.1" + xstream "^11.14.0" + +"@cosmjs/math@^0.30.0", "@cosmjs/math@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.30.1.tgz#8b816ef4de5d3afa66cb9fdfb5df2357a7845b8a" + integrity sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q== + dependencies: + bn.js "^5.2.0" + +"@cosmjs/proto-signing@^0.30.0", "@cosmjs/proto-signing@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.30.1.tgz#f0dda372488df9cd2677150b89b3e9c72b3cb713" + integrity sha512-tXh8pPYXV4aiJVhTKHGyeZekjj+K9s2KKojMB93Gcob2DxUjfKapFYBMJSgfKPuWUPEmyr8Q9km2hplI38ILgQ== + dependencies: + "@cosmjs/amino" "^0.30.1" + "@cosmjs/crypto" "^0.30.1" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + cosmjs-types "^0.7.1" + long "^4.0.0" + +"@cosmjs/socket@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.30.1.tgz#00b22f4b5e2ab01f4d82ccdb7b2e59536bfe5ce0" + integrity sha512-r6MpDL+9N+qOS/D5VaxnPaMJ3flwQ36G+vPvYJsXArj93BjgyFB7BwWwXCQDzZ+23cfChPUfhbINOenr8N2Kow== + dependencies: + "@cosmjs/stream" "^0.30.1" + isomorphic-ws "^4.0.1" + ws "^7" + xstream "^11.14.0" + +"@cosmjs/stargate@^0.30.0", "@cosmjs/stargate@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.30.1.tgz#e1b22e1226cffc6e93914a410755f1f61057ba04" + integrity sha512-RdbYKZCGOH8gWebO7r6WvNnQMxHrNXInY/gPHPzMjbQF6UatA6fNM2G2tdgS5j5u7FTqlCI10stNXrknaNdzog== + dependencies: + "@confio/ics23" "^0.6.8" + "@cosmjs/amino" "^0.30.1" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/proto-signing" "^0.30.1" + "@cosmjs/stream" "^0.30.1" + "@cosmjs/tendermint-rpc" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + cosmjs-types "^0.7.1" + long "^4.0.0" + protobufjs "~6.11.3" + xstream "^11.14.0" + +"@cosmjs/stream@^0.30.0", "@cosmjs/stream@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.30.1.tgz#ba038a2aaf41343696b1e6e759d8e03a9516ec1a" + integrity sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ== + dependencies: + xstream "^11.14.0" + +"@cosmjs/tendermint-rpc@^0.30.0", "@cosmjs/tendermint-rpc@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.30.1.tgz#c16378892ba1ac63f72803fdf7567eab9d4f0aa0" + integrity sha512-Z3nCwhXSbPZJ++v85zHObeUggrEHVfm1u18ZRwXxFE9ZMl5mXTybnwYhczuYOl7KRskgwlB+rID0WYACxj4wdQ== + dependencies: + "@cosmjs/crypto" "^0.30.1" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/json-rpc" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/socket" "^0.30.1" + "@cosmjs/stream" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + axios "^0.21.2" + readonly-date "^1.0.0" + xstream "^11.14.0" + +"@cosmjs/utils@^0.30.0", "@cosmjs/utils@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.30.1.tgz#6d92582341be3c2ec8d82090253cfa4b7f959edb" + integrity sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g== + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@datadog/native-appsec@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@datadog/native-appsec/-/native-appsec-3.2.0.tgz#ddeca06cbaba9c6905903d09d18013f81eedc8c3" + integrity sha512-biAa7EFfuavjSWgSQaCit9CqGzr6Af5nhzfNNGJ38Y/Y387hDvLivAR374kK1z6XoxGZEOa+XPbVogmV/2Bcjw== + dependencies: + node-gyp-build "^3.9.0" + +"@datadog/native-iast-rewriter@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@datadog/native-iast-rewriter/-/native-iast-rewriter-2.0.1.tgz#dc4a23796870f2d840053ae879c61547eda6bb89" + integrity sha512-Mm+FG3XxEbPrAfJQPOMHts7iZZXRvg9gnGeeFRGkyirmRcQcOpZO4wFe/8K61DUVa5pXpgAJQ2ZkBGYF1O9STg== + dependencies: + node-gyp-build "^4.5.0" + +"@datadog/native-iast-taint-tracking@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@datadog/native-iast-taint-tracking/-/native-iast-taint-tracking-1.5.0.tgz#1a55eca6692079ac6167696682acb972aa0b0181" + integrity sha512-SOWIk1M6PZH0osNB191Voz2rKBPoF5hISWVSK9GiJPrD40+xjib1Z/bFDV7EkDn3kjOyordSBdNPG5zOqZJdyg== + dependencies: + node-gyp-build "^3.9.0" + +"@datadog/native-metrics@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@datadog/native-metrics/-/native-metrics-2.0.0.tgz#65bf03313ee419956361e097551db36173e85712" + integrity sha512-YklGVwUtmKGYqFf1MNZuOHvTYdKuR4+Af1XkWcMD8BwOAjxmd9Z+97328rCOY8TFUJzlGUPaXzB8j2qgG/BMwA== + dependencies: + node-addon-api "^6.1.0" + node-gyp-build "^3.9.0" + +"@datadog/pprof@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@datadog/pprof/-/pprof-3.1.0.tgz#d58aac33985dbb71f77d85a41023a35f1ad55290" + integrity sha512-Bg8O8yrHeL2KKHXhLoAAT33ZfzLnZ6rWfOjy8PkcNhUJy3UwNVLbUoApf+99EyLjqpzpk/kZXrIAMBzMMB8ilg== + dependencies: + delay "^5.0.0" + node-gyp-build "<4.0" + p-limit "^3.1.0" + pprof-format "^2.0.7" + source-map "^0.7.4" + +"@datadog/sketches-js@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@datadog/sketches-js/-/sketches-js-2.1.0.tgz#8c7e8028a5fc22ad102fa542b0a446c956830455" + integrity sha512-smLocSfrt3s53H/XSVP3/1kP42oqvrkjUPtyaFd1F79ux24oE31BKt+q0c6lsa6hOYrFzsIwyc5GXAI5JmfOew== + "@endo/base64@^0.2.21", "@endo/base64@^0.2.8": version "0.2.21" resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-0.2.21.tgz#e58fc38891fda25d57f1ed90274210c8781b2f22" integrity sha512-Q7L3Ns1xoWma0qisXPUukuS/imugvE17HrwrXypfQlx5k0nh9zrhfboVs59EWfYtBllF27ZmxLZW2C88IUreFQ== +"@endo/base64@^0.2.25", "@endo/base64@^0.2.31", "@endo/base64@^0.2.32", "@endo/base64@^0.2.34": + version "0.2.34" + resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-0.2.34.tgz#3de6f121d079a6d9055ac1a6c38243860aa1b6ee" + integrity sha512-UXfNd3fVqjOMwHW81g0pfhzMPUbmr2X0+1oBYVuYCco5k+GDwzO6smRzfef0MGtxLVIXvf86Npb5eDuegQKGHA== + "@endo/base64@^0.2.27": version "0.2.27" resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-0.2.27.tgz#6c68fe83092c621e2d46f77523e0e898e7f7fa68" @@ -1384,11 +2217,64 @@ rollup "^2.47.0" source-map "^0.7.3" +"@endo/bundle-source@^2.2.0", "@endo/bundle-source@^2.3.1", "@endo/bundle-source@^2.5.1": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@endo/bundle-source/-/bundle-source-2.7.0.tgz#10a398128b8968bdd89420fab4390b10ae258336" + integrity sha512-IT/TCxjvcJj6IU22bnIpouPJuZG+ANJrbWKihnlNyQppS25YEYjvf31iGIRBhcJWaWDDyDIfIDsSgxmrFBWnyw== + dependencies: + "@agoric/babel-generator" "^7.17.4" + "@babel/parser" "^7.17.3" + "@babel/traverse" "^7.17.3" + "@endo/base64" "^0.2.34" + "@endo/compartment-mapper" "^0.9.1" + "@endo/init" "^0.5.59" + "@endo/promise-kit" "^0.2.59" + "@endo/where" "^0.3.4" + "@rollup/plugin-commonjs" "^19.0.0" + "@rollup/plugin-node-resolve" "^13.0.0" + acorn "^8.2.4" + jessie.js "^0.3.2" + rollup endojs/endo#rollup-2.7.1-patch-1 + source-map "^0.7.3" + +"@endo/captp@^2.0.7": + version "2.0.19" + resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-2.0.19.tgz#d1e878271eb24fc4d85b67586a4b9891180ab0ba" + integrity sha512-vkJzBvYD9mgdKJuiunvaQ6HcvnNmu1bJBx1yIkRDcvbfSoX0FqYQMNP/t9lF/h6HqddGXjJdKDPpyfwQnRCc+A== + dependencies: + "@endo/eventual-send" "^0.16.9" + "@endo/marshal" "^0.8.2" + "@endo/nat" "^4.1.24" + "@endo/promise-kit" "^0.2.53" + +"@endo/captp@^3.1.1": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-3.1.4.tgz#7f6f4d304d2387f16c6080134701e202374361d1" + integrity sha512-fSrbTcFEYZGy26s4qio7KQBivI/Wb0+zV8YMRpls/eDMHIR1Cz+LTn7qD6hcLPpk4fLFjOpDCcbcoSGeP/YMRw== + dependencies: + "@endo/eventual-send" "^0.17.5" + "@endo/marshal" "^0.8.8" + "@endo/nat" "^4.1.30" + "@endo/promise-kit" "^0.2.59" + +"@endo/check-bundle@^0.2.18", "@endo/check-bundle@^0.2.3": + version "0.2.21" + resolved "https://registry.yarnpkg.com/@endo/check-bundle/-/check-bundle-0.2.21.tgz#fe6947f6648a49ecf47b9d48860f4e9db3ef810a" + integrity sha512-kv36nzyLMJrvuRXKxMvPxknnxEisADLoMPKcmSN6WTVRuUV7wRlXiptvU3hu2LF/c3mKsoDEfGdhv9oaCMAmEg== + dependencies: + "@endo/base64" "^0.2.34" + "@endo/compartment-mapper" "^0.9.1" + "@endo/cjs-module-analyzer@^0.2.11", "@endo/cjs-module-analyzer@^0.2.21": version "0.2.21" resolved "https://registry.yarnpkg.com/@endo/cjs-module-analyzer/-/cjs-module-analyzer-0.2.21.tgz#e6b6f65d9378d1e56a62caa69948f9e2e442dd17" integrity sha512-nmRVyuqVWTVzewn/4Iy28XGPXcxwdR0475V8E0151Iy221Xyi4q+EcsB4lLbu8dIimkps8pR1eoY4oCWsedbTw== +"@endo/cjs-module-analyzer@^0.2.27", "@endo/cjs-module-analyzer@^0.2.32", "@endo/cjs-module-analyzer@^0.2.34": + version "0.2.34" + resolved "https://registry.yarnpkg.com/@endo/cjs-module-analyzer/-/cjs-module-analyzer-0.2.34.tgz#bef0196fb01477f199159e097a4d6b1c1f0c9591" + integrity sha512-Ik5Q0NDFMLx4wXlP0JCzpPt6yqNGsRrFqhe/DBhsU+3GXDMhpabUZk7xzN6Tthr6MTG06P8p2sOVwwyvNLrlvw== + "@endo/compartment-mapper@^0.5.3": version "0.5.6" resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.5.6.tgz#1c2a9e91c062a24a856e725e7d36a3ee5c46b73c" @@ -1409,16 +2295,107 @@ "@endo/zip" "^0.2.21" ses "^0.15.11" +"@endo/compartment-mapper@^0.7.15", "@endo/compartment-mapper@^0.7.5": + version "0.7.15" + resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.7.15.tgz#fb6c03925c6544dbb699520f100d5088770b5194" + integrity sha512-gZyPrpwyCKX19JrEu/U2QeVVoORoFv0KGpAclB4tSMEj0AMVixLieHtoOSBXZ3z2UCAVBDPeVTj7hp40lRccKA== + dependencies: + "@endo/cjs-module-analyzer" "^0.2.27" + "@endo/static-module-record" "^0.7.14" + "@endo/zip" "^0.2.27" + ses "^0.17.0" + +"@endo/compartment-mapper@^0.8.4", "@endo/compartment-mapper@^0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.8.5.tgz#6910d2be41754fde90190671d2fc5dc48d6fb787" + integrity sha512-PKJ1WgYRBkSEJTYOXZTOf9tYQLEkuGTfhAPoKm22loAuaXWI1ortJ7UdRAPLWt95Cd71KGrmfd1FpemGvmr3lQ== + dependencies: + "@endo/cjs-module-analyzer" "^0.2.32" + "@endo/static-module-record" "^0.7.20" + "@endo/zip" "^0.2.32" + ses "^0.18.5" + +"@endo/compartment-mapper@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.9.1.tgz#e5935ade7bb6280acb8b545ad84e289122bac544" + integrity sha512-uqVFo597bqjWaaPQnqMumkAgk6KVQbQm+hPtoARB2R2VNbBLD8ED/53HrxtvA/+Iw1PQrvJEcZkIGCvbzFKeuA== + dependencies: + "@endo/cjs-module-analyzer" "^0.2.34" + "@endo/static-module-record" "^0.8.1" + "@endo/zip" "^0.2.34" + ses "^0.18.7" + +"@endo/env-options@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@endo/env-options/-/env-options-0.1.3.tgz#430133977de48fb64125535d54f75e0eb0682260" + integrity sha512-ljs5E0+Fhe5IQsciCn6jL5bsi1PYysPm4NhrPmNByw136AcjUbfZhOBmOzeXwOhxaL93cI/jTStNdWEA80Q+nQ== + "@endo/eventual-send@^0.14.8": version "0.14.8" resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.14.8.tgz#0d95b5cd7e420219cdd84c43683bfbd0b6cd2ff6" integrity sha512-JIbzzIk1/Z+44O7+IuF5HfMzGu1txOvW5IJKu91syk//MIWU1+XQyPhwQKuWiZ2KX+ADdSPyNZTZjAN2IAE8gQ== -"@endo/eventual-send@^0.15.5": +"@endo/eventual-send@^0.15.3", "@endo/eventual-send@^0.15.5": version "0.15.5" resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.15.5.tgz#116233ad86beac385604ee8fe12dc0ff4c5c13cd" integrity sha512-/xc8g2pbZ/IBRps5TQ4YwyxwUKmX7DY1jsj79mAypVkhXzk5jWQ9eRzGmR+j/uYgS6rRwi0DLdtVUTKRaaH5BA== +"@endo/eventual-send@^0.16.5", "@endo/eventual-send@^0.16.9": + version "0.16.9" + resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.16.9.tgz#d0f81510a6cc3b7e160e27335f03de89a367b8d8" + integrity sha512-2ahhtCKpT1f/KDcD7aOhSQfBzzO8cL8m5I8baeXln20QM8mEtBIavlj8d36Pop2VSCoK2uoqAKUNAzgF/hTaIg== + +"@endo/eventual-send@^0.17.2", "@endo/eventual-send@^0.17.5": + version "0.17.5" + resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.17.5.tgz#2f5390eda82a1c4dcd4c1c9c748ddd96d043d0ba" + integrity sha512-GpDSU2+Hcn99mff3dt62/ZDiZkG20spawZcNgRNB5oZe+kW6pP26ugDI2jRXML5yoQbUBtSit26HDD8GX2p/HQ== + dependencies: + "@endo/env-options" "^0.1.3" + +"@endo/exo@^0.2.2": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@endo/exo/-/exo-0.2.5.tgz#2bc9c742e43eea544153132c6632f371637c5345" + integrity sha512-5shiclRqU/55/SZbf2EVLyhY8UeAIbsGYvScsrmdforL+dDVjD2q3fdV7oLEVb/jlLKHZwmpa2XTYwpR/15ogg== + dependencies: + "@endo/env-options" "^0.1.3" + "@endo/far" "^0.2.21" + "@endo/pass-style" "^0.1.6" + "@endo/patterns" "^0.2.5" + +"@endo/far@^0.2.18", "@endo/far@^0.2.19", "@endo/far@^0.2.21", "@endo/far@^0.2.3": + version "0.2.21" + resolved "https://registry.yarnpkg.com/@endo/far/-/far-0.2.21.tgz#f61fae564486d7b7ab77c95c4bd2b3bf710e6a81" + integrity sha512-PTY6PrHAusAnU70oTRPk+tRQ4Nac8isg3nXXoe6y5F6rHrAZsSIYINk9bOfRo3MqW3e++qU0+AVd3niYydk3OQ== + dependencies: + "@endo/eventual-send" "^0.17.5" + "@endo/pass-style" "^0.1.6" + +"@endo/import-bundle@^0.2.45": + version "0.2.55" + resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-0.2.55.tgz#4ad1012d15a2027992b2fc2a3848cbaa5bb5ff90" + integrity sha512-1t3AbhBSpb090+jSmta/2/PmkdSjXU3s0Pcdx/IQp2qcTqsrQDiCCZTdbZ24moxBGllAuTnPYTeA3jiu6/vdXA== + dependencies: + "@endo/base64" "^0.2.27" + "@endo/compartment-mapper" "^0.7.15" + +"@endo/import-bundle@^0.3.4": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-0.3.5.tgz#b2b21f58c9fd077857754ccb7e9d0a91868de88d" + integrity sha512-jYBXGnvWhw4w/N8ZPGar+sftNg/wgI5mCCE0ooUYMUBvM5ulPHI+/KYW3FD9pSwU8h7d5Nvs3bvA4w6dN7b67A== + dependencies: + "@endo/base64" "^0.2.32" + "@endo/compartment-mapper" "^0.8.5" + +"@endo/init@^0.5.41", "@endo/init@^0.5.49", "@endo/init@^0.5.56", "@endo/init@^0.5.59": + version "0.5.59" + resolved "https://registry.yarnpkg.com/@endo/init/-/init-0.5.59.tgz#b4e5433f1d0e9cb49de3db48585642e946ed6299" + integrity sha512-F6+b1xUapQcsL4ALZTrM1fQJcbT+nbDLVq//6rH7ZVQGrXLOJK09ImOQVBm0YflVkfhu8UB6fk2YZQx+uaPwxw== + dependencies: + "@endo/base64" "^0.2.34" + "@endo/eventual-send" "^0.17.5" + "@endo/lockdown" "^0.1.31" + "@endo/promise-kit" "^0.2.59" + "@endo/init@^0.5.43": version "0.5.43" resolved "https://registry.yarnpkg.com/@endo/init/-/init-0.5.43.tgz#bf951ab5a7355661a0084a0e59cdc2d3bb0e3354" @@ -1436,25 +2413,68 @@ dependencies: ses "^0.15.17" -"@endo/marshal@^0.6.3": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-0.6.3.tgz#9a22b77acb3371f8fb7f33958c7781c792617e9b" - integrity sha512-3TxX93F/hIWGU4h+dR/I5dskH7iDhMhRFfWIrmGj8yMMq6rW9CtgdOy59GfaHBJ1YB70ZH4ULwb1Iir5Z2EcLw== +"@endo/lockdown@^0.1.28", "@endo/lockdown@^0.1.31": + version "0.1.31" + resolved "https://registry.yarnpkg.com/@endo/lockdown/-/lockdown-0.1.31.tgz#8921730896a3fdd8e079bf225f4cbf8751cd74a0" + integrity sha512-6pGdxCEF8+MOVX2weML+RMkzEwIv3hATa2CMZy8B7P2pakfIama6PoopraSzt9OB/S+o39GW3VLqwRWlGN/J+Q== + dependencies: + ses "^0.18.7" + +"@endo/marshal@^0.6.7": + version "0.6.9" + resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-0.6.9.tgz#a30a323c86100512aba2c2c1f8ca2c7cf432c621" + integrity sha512-FH+Z76Hv+yoRmpoo3SZOTLfsqdMBhbqqUHD/UQ+38G91NN9g/NVRNObq25CkR/oU5EOlzdCxghL5L3H7tkXDCA== dependencies: - "@endo/eventual-send" "^0.14.8" - "@endo/nat" "^4.1.8" - "@endo/promise-kit" "^0.2.37" + "@endo/eventual-send" "^0.15.5" + "@endo/nat" "^4.1.14" + "@endo/promise-kit" "^0.2.43" + +"@endo/marshal@^0.8.2", "@endo/marshal@^0.8.5", "@endo/marshal@^0.8.6", "@endo/marshal@^0.8.8": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-0.8.8.tgz#d6e51a5c1c4c97f3904a8ee93bb352706391baa7" + integrity sha512-uoGF5Hwmne9y8eT73474YTLjfcvgWQD+9Iq5PrJSy+Ymek4VbOGNv12j5wvA0TTylbHlrakFv0fs7q10OV9B+Q== + dependencies: + "@endo/eventual-send" "^0.17.5" + "@endo/nat" "^4.1.30" + "@endo/pass-style" "^0.1.6" + "@endo/promise-kit" "^0.2.59" -"@endo/nat@^4.1.8": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-4.1.8.tgz#2c761c64f124cb610a63bded0c78a306678d6304" - integrity sha512-KwNkmw2tS8rDs0V3Q/cgje6JNg2AarSjFimT/hchcxz4BMBHS5mI486/W9QC3yQcxkidqX7GX3sYcD18xu5tBA== +"@endo/nat@^4.1.12", "@endo/nat@^4.1.14", "@endo/nat@^4.1.24", "@endo/nat@^4.1.27", "@endo/nat@^4.1.30": + version "4.1.30" + resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-4.1.30.tgz#a52137e4d9dc159dc01f146a3506e7de3cb912f2" + integrity sha512-UN8obyLCGrG4vvEX+LV8ZOQMfwVDDA6z6mnvBRyZXbl+GwAs8QXa7vi9NiscidyCTvxad7jjfuf7IIqlIZUTQg== "@endo/netstring@^0.2.8": version "0.2.13" resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-0.2.13.tgz#de0742010998eb373a4ab0a011f1c7a769838075" integrity sha512-+Q0pAg+3oA2ZlKth3k7BD+bhKMmVHfcHSWcBiCVg7LFVzrOIiltI9bEk7TJaGSWHTarUoR+vAPZwL/GULan15g== +"@endo/netstring@^0.3.19", "@endo/netstring@^0.3.26": + version "0.3.29" + resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-0.3.29.tgz#7519e1e410aa3af7f866260813b410dd2982f8a2" + integrity sha512-KD4gWQdCTPcSb2QWKl4QPfXcvACGbpuJsAT0rUg5u0S5qBzihFkECF0Oghmfwqs7Mbms4SmVDWL2Rxtkl66t9Q== + dependencies: + "@endo/init" "^0.5.59" + "@endo/stream" "^0.3.28" + ses "^0.18.7" + +"@endo/pass-style@^0.1.3", "@endo/pass-style@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@endo/pass-style/-/pass-style-0.1.6.tgz#eb554b6c1b4ff3a4e55a8f3c612866bf27e91b76" + integrity sha512-SkRFW0FqBjjVagBDyhlGr7GmDFtVqZYhH4rN+YBtIjciFugmMT5p8gdnTnns3AUnurBSHH55MjKXIOzJNL+Txw== + dependencies: + "@endo/promise-kit" "^0.2.59" + "@fast-check/ava" "^1.1.5" + +"@endo/patterns@^0.2.2", "@endo/patterns@^0.2.3", "@endo/patterns@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@endo/patterns/-/patterns-0.2.5.tgz#84fae7cd78ea641b2c20549a19b101ad04ef2bde" + integrity sha512-oJATZDCNPR2FzbzrRM1GlH1E8dZe6j5zAVdhQPCcaVmlyZd66YVEnm4VaoI6EV+LGPclAoMFq2uHn9/npysxdQ== + dependencies: + "@endo/eventual-send" "^0.17.5" + "@endo/marshal" "^0.8.8" + "@endo/promise-kit" "^0.2.59" + "@endo/promise-kit@^0.2.37": version "0.2.37" resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-0.2.37.tgz#ef1506a953bbbb02793a33c7f22a6ac07783bea6" @@ -1462,6 +2482,13 @@ dependencies: ses "^0.15.11" +"@endo/promise-kit@^0.2.41", "@endo/promise-kit@^0.2.49", "@endo/promise-kit@^0.2.53", "@endo/promise-kit@^0.2.56", "@endo/promise-kit@^0.2.59": + version "0.2.59" + resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-0.2.59.tgz#93f61a709660252c541e9ecaf7c138f1cf279f9a" + integrity sha512-l4KK3CE4gb0cqPA2u9Agh+7yIbsExO10eJbnWKDgN9FC6b1oaZPL9NdXf3kOhSjH1OFCPHtc+whH9uMNV9e+KQ== + dependencies: + ses "^0.18.7" + "@endo/promise-kit@^0.2.43": version "0.2.43" resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-0.2.43.tgz#d4c563124c3ce35843492cbbf7fe7568a7693b1f" @@ -1498,11 +2525,61 @@ "@babel/types" "^7.17.0" ses "^0.15.11" +"@endo/static-module-record@^0.7.14", "@endo/static-module-record@^0.7.20": + version "0.7.20" + resolved "https://registry.yarnpkg.com/@endo/static-module-record/-/static-module-record-0.7.20.tgz#5d9583aaa8042b8a6de58c72f765e5a28e880489" + integrity sha512-qpow712L7Bh7F3olFW9e15PcDWnC2eSY4xPdhpZoYTzedsyjCETRgxFWY6+DdT193lNlyKIn0On1O1Go+5WmBA== + dependencies: + "@agoric/babel-generator" "^7.17.6" + "@babel/parser" "^7.17.3" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + ses "^0.18.5" + +"@endo/static-module-record@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@endo/static-module-record/-/static-module-record-0.8.1.tgz#cf1900b66a92aa0a46584486e778351483102153" + integrity sha512-F2x+jALc286VQ7xfd0LXYyo+PwHR46dolmuMLOC7MkpPHVT323jH6n29U6unIEFTqknhVB6gHXIwuwGD4mzSWQ== + dependencies: + "@agoric/babel-generator" "^7.17.6" + "@babel/parser" "^7.17.3" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + ses "^0.18.7" + +"@endo/stream-node@^0.2.19", "@endo/stream-node@^0.2.26": + version "0.2.29" + resolved "https://registry.yarnpkg.com/@endo/stream-node/-/stream-node-0.2.29.tgz#b006afd648f5ae079e6d333b9679edb13c11d8be" + integrity sha512-wL8io8Y106f15CsV/cBdlgZjkK7a8NFlR+o0jalwILHErFg7foTKPGqK5lb+tuNue6vaheC/QXNGG5/nWx4u7g== + dependencies: + "@endo/init" "^0.5.59" + "@endo/stream" "^0.3.28" + ses "^0.18.7" + +"@endo/stream@^0.3.18", "@endo/stream@^0.3.25", "@endo/stream@^0.3.28": + version "0.3.28" + resolved "https://registry.yarnpkg.com/@endo/stream/-/stream-0.3.28.tgz#755bbdbf1fd8d31a9ad80a8b5fcc20ba37535c64" + integrity sha512-zlSm7KlMxVDal2Ob6pazjZ7vRTFgQxwSSiAeLJMM7tlBPL28G28MJfcPAMFKtcN+jknW1MXcHDmjzMo4kJuUiA== + dependencies: + "@endo/eventual-send" "^0.17.5" + "@endo/promise-kit" "^0.2.59" + ses "^0.18.7" + +"@endo/where@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@endo/where/-/where-0.3.4.tgz#af8f5cd8140e376a881e08e522359aa18ab162e5" + integrity sha512-v4jTUPJwjYY2EUBG1hzwhzFywsTejMPr1hDSQevCVVzK8HnSzHch0AeUciBSo+/2+iM8JTstF1TLlLq0n5YQmw== + "@endo/zip@^0.2.11", "@endo/zip@^0.2.21": version "0.2.21" resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-0.2.21.tgz#98ac48439ebb8bb146b7c4488633d975a42fda2d" integrity sha512-YtvksxnEAQjh+7IrwZS87n5oNiY5tv2W9W56AOCBAazlG+yPmwITVm8zQYuXlc3P1Nl2BqKzC4Xw4SfbbCtzzw== +"@endo/zip@^0.2.25", "@endo/zip@^0.2.27", "@endo/zip@^0.2.31", "@endo/zip@^0.2.32", "@endo/zip@^0.2.34": + version "0.2.34" + resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-0.2.34.tgz#d5571ef91019a647f64e69b003a0e3fb23de827d" + integrity sha512-ty6zqDLF3HZyc5Icq0/d93snpNBJsdqIeb8GcbDWxwHBhczmJoTPu0YOnWPtNgkE8bqi+2zhibmdS9kdn7M1Ew== + "@es-joy/jsdoccomment@^0.8.0-alpha.2": version "0.8.0-alpha.2" resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.8.0-alpha.2.tgz#78585147d8e6231270374dae528fe5b7b5587b5a" @@ -1527,6 +2604,13 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@fast-check/ava@^1.1.3", "@fast-check/ava@^1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@fast-check/ava/-/ava-1.1.5.tgz#b471ce5252a3d62eb9bc316f1b7b0a79a7c8341f" + integrity sha512-OopAjw8v6r3sEqR02O61r2yGoE4B1nWDRXAkB4tuK/v7qemkf86Fz+GRgBgAkSFql85VAeUq+wlx0F3Y7wJzzA== + dependencies: + fast-check "^3.0.0" + "@iarna/toml@^2.2.3": version "2.2.5" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" @@ -1545,6 +2629,11 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@noble/hashes@^1", "@noble/hashes@^1.0.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1585,6 +2674,11 @@ dependencies: "@opentelemetry/context-base" "^0.16.0" +"@opentelemetry/api@^1.0.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f" + integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA== + "@opentelemetry/context-base@^0.16.0": version "0.16.0" resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.16.0.tgz#f41ca27221f31247e8bccfdde87a5cbfd9b57679" @@ -1599,6 +2693,13 @@ "@opentelemetry/context-base" "^0.16.0" semver "^7.1.3" +"@opentelemetry/core@^1.14.0": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.15.2.tgz#5b170bf223a2333884bbc2d29d95812cdbda7c9f" + integrity sha512-+gBv15ta96WqkHZaPpcDHiaz0utiiHZVfm2YOYSqFGrUaJpPkMoSuLBB58YFQGi6Rsb9EHos84X6X5+9JspmLw== + dependencies: + "@opentelemetry/semantic-conventions" "1.15.2" + "@opentelemetry/exporter-prometheus@^0.16.0": version "0.16.0" resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.16.0.tgz#2623568ba520975d9441b5047f9c48554005efb6" @@ -1628,6 +2729,64 @@ "@opentelemetry/api" "^0.16.0" "@opentelemetry/core" "^0.16.0" +"@opentelemetry/semantic-conventions@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz#3bafb5de3e20e841dff6cb3c66f4d6e9694c4241" + integrity sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw== + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + "@rollup/plugin-commonjs@^19.0.0": version "19.0.2" resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz#1ccc3d63878d1bc9846f8969f09dd3b3e4ecc244" @@ -1715,6 +2874,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + "@types/minimatch@*": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" @@ -1725,6 +2889,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== +"@types/node@>=13.7.0": + version "20.5.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30" + integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== + "@types/q@^1.5.1": version "1.5.4" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" @@ -1737,6 +2906,11 @@ dependencies: "@types/node" "*" +"@types/triple-beam@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" + integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== + "@typescript-eslint/parser@^4.26.0": version "4.26.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.0.tgz#31b6b732c9454f757b020dab9b6754112aa5eeaf" @@ -2224,6 +3398,11 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" @@ -2254,6 +3433,11 @@ acorn@^8.7.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.8.2: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + agentkeepalive@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" @@ -2298,6 +3482,52 @@ agoric@^0.13.21: opener "^1.5.2" ws "^7.2.0" +agoric@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/agoric/-/agoric-0.21.1.tgz#dbe04757c6deba83dd45cbd39e10eeaa26e8c7de" + integrity sha512-couQBRaYLY9S5cXm0uUmf/022+Zy6EHH9tbZLOFYGzdFQeTMZCvYbxdklKGVzLWcoe8CHc/YMemnpaBghkPG4A== + dependencies: + "@agoric/access-token" "^0.4.21" + "@agoric/assert" "^0.6.0" + "@agoric/cache" "^0.3.2" + "@agoric/casting" "^0.4.2" + "@agoric/cosmic-proto" "^0.3.0" + "@agoric/ertp" "^0.16.2" + "@agoric/inter-protocol" "^0.16.1" + "@agoric/internal" "^0.3.2" + "@agoric/smart-wallet" "^0.5.3" + "@agoric/store" "^0.9.2" + "@agoric/swingset-vat" "^0.32.2" + "@agoric/vats" "^0.15.1" + "@agoric/zoe" "^0.26.2" + "@agoric/zone" "^0.2.2" + "@confio/relayer" "^0.9.0" + "@cosmjs/crypto" "^0.30.1" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/proto-signing" "^0.30.1" + "@cosmjs/stargate" "^0.30.1" + "@cosmjs/tendermint-rpc" "^0.30.1" + "@endo/bundle-source" "^2.5.1" + "@endo/captp" "^3.1.1" + "@endo/compartment-mapper" "^0.8.4" + "@endo/far" "^0.2.18" + "@endo/init" "^0.5.56" + "@endo/marshal" "^0.8.5" + "@endo/nat" "^4.1.27" + "@endo/promise-kit" "^0.2.56" + "@iarna/toml" "^2.2.3" + anylogger "^0.21.0" + chalk "^5.2.0" + commander "^10.0.0" + dd-trace "^3.3.0" + deterministic-json "^1.0.5" + esm agoric-labs/esm#Agoric-built + inquirer "^8.2.2" + opener "^1.5.2" + tmp "^0.2.1" + ws "^7.2.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -2308,6 +3538,16 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== +ajv@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84" + integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -2376,7 +3616,7 @@ ansi-escapes@^3.2.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.1.0: +ansi-escapes@^4.1.0, ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2442,6 +3682,11 @@ ansi-styles@^6.0.0, ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== +ansi-styles@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anylogger@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/anylogger/-/anylogger-0.21.0.tgz#b6cbea631cd5e1c884e5c0fa007d80bde1b22bd4" @@ -2483,6 +3728,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -2629,6 +3879,11 @@ async@^2.6.2: dependencies: lodash "^4.17.14" +async@^3.1.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2720,6 +3975,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios@0.21.4, axios@^0.21.2: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + babel-eslint@^10.0.3: version "10.1.0" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" @@ -2778,7 +4040,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2, base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2815,6 +4077,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bech32@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + better-sqlite3@^7.4.1: version "7.5.0" resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-7.5.0.tgz#2a91cb616453f002096743b0e5b66a7021cd1c63" @@ -2823,6 +4090,22 @@ better-sqlite3@^7.4.1: bindings "^1.5.0" prebuild-install "^7.0.0" +better-sqlite3@^7.5.0: + version "7.6.2" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-7.6.2.tgz#47cd8cad5b9573cace535f950ac321166bc31384" + integrity sha512-S5zIU1Hink2AH4xPsN0W43T1/AJ5jrPh7Oy07ocuW/AKYYY02GWzz9NH0nbSMn/gw6fDZ5jZ1QsHt1BXAwJ6Lg== + dependencies: + bindings "^1.5.0" + prebuild-install "^7.1.0" + +better-sqlite3@^8.2.0: + version "8.5.1" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.5.1.tgz#984f7645303afa76289569804ee56e211d8ffa66" + integrity sha512-aDfC67xfll6bugnOqRJhdUWioQZnkhLkrwZ+oo6yZbNMtyktbwkDO4SfBcCVWbm4BlsCjCNTJchlHaBt+vB4Iw== + dependencies: + bindings "^1.5.0" + prebuild-install "^7.1.0" + big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -2850,7 +4133,12 @@ bindings@^1.2.1, bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.3: +bintrees@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" + integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== + +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -2879,6 +4167,11 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +bn.js@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -3307,11 +4600,24 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== +chalk@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3420,6 +4726,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cjs-module-lexer@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -3466,6 +4777,18 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + cli-truncate@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" @@ -3479,6 +4802,11 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3504,6 +4832,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" @@ -3533,7 +4866,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3565,6 +4898,14 @@ color-string@^1.5.4: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color@^3.0.0: version "3.1.3" resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" @@ -3573,11 +4914,27 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.4" +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + colorette@^1.2.1, colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3590,6 +4947,16 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +commander@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" + integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3820,6 +5187,14 @@ cosmiconfig@^5.0.0: js-yaml "^3.13.1" parse-json "^4.0.0" +cosmjs-types@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.7.2.tgz#a757371abd340949c5bd5d49c6f8379ae1ffd7e2" + integrity sha512-vf2uLyktjr/XVAgEq0DjMxeAWh1yYREe7AMHDKd7EiHVqxBPCaBS+qEEQUkXbR9ndnckqr1sUG8BQhazh4X5lA== + dependencies: + long "^4.0.0" + protobufjs "~6.11.2" + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -3893,6 +5268,11 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +crypto-randomuuid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-randomuuid/-/crypto-randomuuid-1.0.0.tgz#acf583e5e085e867ae23e107ff70279024f9e9e7" + integrity sha512-/RC5F4l1SCqD/jazwUF6+t34Cd8zTSAGZ7rvvZu1whZUhD2a5MOGKjSGowoGcpj/cbVZk1ZODIooJEQQq3nNAA== + css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -4082,6 +5462,43 @@ date-time@^3.1.0: dependencies: time-zone "^1.0.0" +dd-trace@^3.3.0: + version "3.33.0" + resolved "https://registry.yarnpkg.com/dd-trace/-/dd-trace-3.33.0.tgz#d541cdae130cacbe6730d0100d91043e60aa84c4" + integrity sha512-ed7XMiWVAfF51V6dGwPA6TlhTIPUMxE62arc4U2SzS6n0B41tZHpc0n53NnfdaBnDp19epIgbtHdCm3sT00SJg== + dependencies: + "@datadog/native-appsec" "^3.2.0" + "@datadog/native-iast-rewriter" "2.0.1" + "@datadog/native-iast-taint-tracking" "1.5.0" + "@datadog/native-metrics" "^2.0.0" + "@datadog/pprof" "3.1.0" + "@datadog/sketches-js" "^2.1.0" + "@opentelemetry/api" "^1.0.0" + "@opentelemetry/core" "^1.14.0" + crypto-randomuuid "^1.0.0" + diagnostics_channel "^1.1.0" + ignore "^5.2.4" + import-in-the-middle "^1.4.2" + int64-buffer "^0.1.9" + ipaddr.js "^2.1.0" + istanbul-lib-coverage "3.2.0" + koalas "^1.0.2" + limiter "^1.1.4" + lodash.kebabcase "^4.1.1" + lodash.pick "^4.4.0" + lodash.sortby "^4.7.0" + lodash.uniq "^4.5.0" + lru-cache "^7.14.0" + methods "^1.1.2" + module-details-from-path "^1.0.3" + msgpack-lite "^0.1.26" + node-abort-controller "^3.1.1" + opentracing ">=0.12.1" + path-to-regexp "^0.1.2" + protobufjs "^7.2.4" + retry "^0.13.1" + semver "^7.5.4" + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" @@ -4186,6 +5603,13 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" @@ -4255,6 +5679,11 @@ del@^6.1.1: rimraf "^3.0.2" slash "^3.0.0" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -4293,6 +5722,11 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-libc@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -4310,6 +5744,11 @@ diacritics@^1.3.0: resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" integrity sha1-PvqHMj67hj5mls67AILUj/PW96E= +diagnostics_channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/diagnostics_channel/-/diagnostics_channel-1.1.0.tgz#bd66c49124ce3bac697dff57466464487f57cea5" + integrity sha512-OE1ngLDjSBPG6Tx0YATELzYzy3RKHC+7veQ8gLa8yS7AAgw65mFbVdcsu3501abqOZCEZqZyAIemB0zXlqDSuw== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -4475,7 +5914,7 @@ electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz#0ecebc529ceb49dd2a7c838ae425236644c3439a" integrity sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A== -elliptic@^6.5.3: +elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -4518,6 +5957,11 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -4852,7 +6296,7 @@ eslint@^7.27.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -esm@agoric-labs/esm#Agoric-built: +esm@agoric-labs/esm#Agoric-built, "esm@github:agoric-labs/esm#Agoric-built": version "3.2.25" resolved "https://codeload.github.com/agoric-labs/esm/tar.gz/3603726ad4636b2f865f463188fcaade6375638e" @@ -4894,6 +6338,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -4914,6 +6363,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-lite@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/event-lite/-/event-lite-0.1.3.tgz#3dfe01144e808ac46448f0c19b4ab68e403a901d" + integrity sha512-8qz9nOz5VeD2z96elrEKD2U433+L3DWdUdDkOINLGOJvx1GsMBbMn0aCeu28y8/e85A6mCigBiFlYMnTBEGlSw== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -5063,6 +6517,13 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-check@^3.0.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.12.0.tgz#440949277387a053f7f82cd532fa3fcf67346ba1" + integrity sha512-SqahE9mlL3+lhjJ39joMLwcj6F+24hfZdf/tchlNO8sHcTdrUUdA5P/ZbSFZM9Xpzs36XaneGwE0FWepm/zyOA== + dependencies: + pure-rand "^6.0.0" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5118,6 +6579,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-safe-stringify@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.4.tgz#4fe828718aa61dbcf9119c3c24e79cc4dea973b2" + integrity sha512-mNlGUdKOeGNleyrmgbKYtbnCr9KZkZXU7eM89JRo8vY10f7Ul1Fbj07hUBW3N4fC0xM+fmfFfa2zM7mIizhpNQ== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -5132,6 +6598,11 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -5286,11 +6757,21 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + follow-redirects@^1.0.0: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +follow-redirects@^1.14.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -5555,6 +7036,13 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" +globalthis@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.0.1, globby@^11.0.3: version "11.0.3" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" @@ -5966,7 +7454,7 @@ icss-utils@^4.1.0: dependencies: postcss "^7.0.14" -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.1.8: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -5996,6 +7484,11 @@ ignore@^5.0.5, ignore@^5.1.4, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + immediate@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" @@ -6031,6 +7524,16 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-in-the-middle@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz#2a266676e3495e72c04bbaa5ec14756ba168391b" + integrity sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw== + dependencies: + acorn "^8.8.2" + acorn-import-assertions "^1.9.0" + cjs-module-lexer "^1.2.2" + module-details-from-path "^1.0.3" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -6051,6 +7554,11 @@ import-meta-resolve@^1.1.1: dependencies: builtins "^4.0.0" +import-meta-resolve@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz#75237301e72d1f0fbd74dbc6cca9324b164c2cc9" + integrity sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -6128,6 +7636,32 @@ inquirer@^6.3.1: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^8.2.2: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +int64-buffer@^0.1.9: + version "0.1.10" + resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.10.tgz#277b228a87d95ad777d07c13832022406a473423" + integrity sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA== + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -6160,6 +7694,11 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + irregular-plurals@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" @@ -6395,6 +7934,11 @@ is-installed-globally@^0.3.1: global-dirs "^2.0.1" is-path-inside "^3.0.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -6523,6 +8067,11 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-string@^1.0.5, is-string@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" @@ -6547,6 +8096,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-unicode-supported@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014" @@ -6601,12 +8155,17 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.1: +istanbul-lib-coverage@3.2.0, istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.1: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== @@ -6638,6 +8197,13 @@ javascript-stringify@^2.0.1: resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== +jessie.js@^0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/jessie.js/-/jessie.js-0.3.3.tgz#c79a8b1f105b41f4e5a278f8dc67339c273b5900" + integrity sha512-qtm2JSB/ZeH9xNNPjVkeTFH+Hoq9BxAzakgf6WK1PLarIoXJ9roSi+Z5UF65K47rT7QteWrP8b6RPBVquvIwsg== + dependencies: + "@endo/far" "^0.2.3" + js-string-escape@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" @@ -6648,6 +8214,13 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + js-yaml@^3.13.1, js-yaml@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -6805,6 +8378,16 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +koalas@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/koalas/-/koalas-1.0.2.tgz#318433f074235db78fae5661a02a8ca53ee295cd" + integrity sha512-RYhBbYaTTTHId3l6fnMZc3eGQNW6FVCqMG6AMwA5I1Mafr6AflaXeoi6x3xQuATRotGYRLk6+1ELZH4dstFNOA== + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + last-call-webpack-plugin@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" @@ -6828,6 +8411,23 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +libsodium-wrappers@^0.7.6: + version "0.7.11" + resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz#53bd20606dffcc54ea2122133c7da38218f575f7" + integrity sha512-SrcLtXj7BM19vUKtQuyQKiQCRJPgbpauzl3s0rSwD+60wtHqSUuqcoawlMDheCJga85nKOQwxNYQxf/CKAvs6Q== + dependencies: + libsodium "^0.7.11" + +libsodium@^0.7.11: + version "0.7.11" + resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.11.tgz#cd10aae7bcc34a300cc6ad0ac88fcca674cfbc2e" + integrity sha512-WPfJ7sS53I2s4iM58QxY3Inb83/6mjlYgcmZs7DJsvDlnmVUwNinBCi5vBT43P6bHRy01O4zsMU2CoVR6xJ40A== + +limiter@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== + linkify-it@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" @@ -6941,6 +8541,16 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -6966,16 +8576,46 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.5: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.5: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +logform@^2.2.0, logform@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b" + integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg== + dependencies: + "@colors/colors" "1.5.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + loglevel@^1.6.8: version "1.7.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + lower-case@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" @@ -7013,6 +8653,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.0: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + magic-string@^0.25.7: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -7176,7 +8821,7 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@~1.1.2: +methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -7216,6 +8861,14 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +microtime@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/microtime/-/microtime-3.1.1.tgz#f3ce12f4091c55fb2982c87205e2e7698afdcd0c" + integrity sha512-to1r7o24cDsud9IhN6/8wGmMx5R2kT0w2Xwm5okbYI3d1dk6Xv0m+Z+jg2vS9pt+ocgQHTCtgs/YuyJhySzxNg== + dependencies: + node-addon-api "^5.0.0" + node-gyp-build "^4.4.0" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -7263,6 +8916,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-fn@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" @@ -7363,6 +9021,11 @@ mkdirp@~1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== + morgan@^1.9.1: version "1.10.0" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" @@ -7401,6 +9064,16 @@ ms@2.1.3, ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +msgpack-lite@^0.1.26: + version "0.1.26" + resolved "https://registry.yarnpkg.com/msgpack-lite/-/msgpack-lite-0.1.26.tgz#dd3c50b26f059f25e7edee3644418358e2a9ad89" + integrity sha512-SZ2IxeqZ1oRFGo0xFGbvBJWMp3yLIY9rlIJyxy8CGrwZn1f0ZK4r6jV/AM1r0FZMDUkWkglOk/eeKIL9g77Nxw== + dependencies: + event-lite "^0.1.1" + ieee754 "^1.1.8" + int64-buffer "^0.1.9" + isarray "^1.0.0" + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -7419,6 +9092,11 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + n-readlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.1.tgz#bbb7364d38bc31a170a199f986fcacfa76b95f6e" @@ -7490,6 +9168,21 @@ node-abi@^3.3.0: dependencies: semver "^7.3.5" +node-abort-controller@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + node-fetch@^2.6.0: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -7502,11 +9195,21 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-gyp-build@<4.0, node-gyp-build@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.9.0.tgz#53a350187dd4d5276750da21605d1cb681d09e25" + integrity sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A== + node-gyp-build@^4.2.3: version "4.3.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== +node-gyp-build@^4.4.0, node-gyp-build@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== + node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -7769,6 +9472,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -7776,6 +9486,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + opencollective-postinstall@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" @@ -7786,6 +9503,11 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +opentracing@>=0.12.1: + version "0.14.7" + resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.7.tgz#25d472bd0296dc0b64d7b94cbc995219031428f5" + integrity sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q== + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -7813,6 +9535,21 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -7859,7 +9596,7 @@ p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -7959,6 +9696,11 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" +pako@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -8071,7 +9813,7 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.7: +path-to-regexp@0.1.7, path-to-regexp@^0.1.2: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= @@ -8523,6 +10265,11 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" +pprof-format@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/pprof-format/-/pprof-format-2.0.7.tgz#526e4361f8b37d16b2ec4bb0696b5292de5046a4" + integrity sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA== + prebuild-install@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.0.0.tgz#3c5ce3902f1cb9d6de5ae94ca53575e4af0c1574" @@ -8542,6 +10289,24 @@ prebuild-install@^7.0.0: tar-fs "^2.0.0" tunnel-agent "^0.6.0" +prebuild-install@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -8604,11 +10369,55 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +prom-client@13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-13.1.0.tgz#1185caffd8691e28d32e373972e662964e3dba45" + integrity sha512-jT9VccZCWrJWXdyEtQddCDszYsiuWj5T0ekrPszi/WEegj3IZy6Mm09iOOVM86A4IKMWq8hZkT2dD9MaSe+sng== + dependencies: + tdigest "^0.1.1" + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +protobufjs@^6.10.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: + version "6.11.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== + 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 "^4.0.0" + +protobufjs@^7.0.0, protobufjs@^7.2.4: + version "7.2.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" + integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== + 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/node" ">=13.7.0" + long "^5.0.0" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -8691,6 +10500,11 @@ pupa@^2.0.1: dependencies: escape-goat "^2.0.0" +pure-rand@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -8822,6 +10636,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +readonly-date@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" + integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== + recast@agoric-labs/recast#Agoric-built: version "0.20.5" resolved "https://codeload.github.com/agoric-labs/recast/tar.gz/879398a55cd50a53ade179de203706a25c53fb49" @@ -9079,6 +10898,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9089,6 +10916,11 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -9133,6 +10965,20 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rollup-plugin-string@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz#fed2d6301fae1e59eb610957df757ef13fada3f0" + integrity sha512-vqyzgn9QefAgeKi+Y4A7jETeIAU1zQmS6VotH6bzm/zmUQEnYkpIGRaOBPY41oiWYV4JyBoGAaBjYMYuv+6wVw== + dependencies: + rollup-pluginutils "^2.4.1" + +rollup-pluginutils@^2.4.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + rollup@^2.47.0: version "2.64.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.64.0.tgz#f0f59774e21fbb56de438a37d06a2189632b207a" @@ -9140,7 +10986,13 @@ rollup@^2.47.0: optionalDependencies: fsevents "~2.3.2" -run-async@^2.2.0: +"rollup@github:endojs/endo#rollup-2.7.1-patch-1": + version "2.70.1-endo.1" + resolved "https://codeload.github.com/endojs/endo/tar.gz/54060e784a4dbe77b6692f17344f4d84a198530d" + optionalDependencies: + fsevents "~2.3.2" + +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -9166,6 +11018,13 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" +rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -9183,6 +11042,11 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -9253,7 +11117,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: +semver@^7.0.0, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -9333,6 +11197,18 @@ ses@^0.16.0: resolved "https://registry.yarnpkg.com/ses/-/ses-0.16.0.tgz#d405fff49daa8e19b1b04344e2a752c9268afa72" integrity sha512-2oKCzl3W24aNqBifLWWEh3OGd+78+SY1GVKWP5ogrqBOjs3X1trwE2akx5pX4M1MFExqXoJGav1CmCq2KBMqOg== +ses@^0.17.0: + version "0.17.1" + resolved "https://registry.yarnpkg.com/ses/-/ses-0.17.1.tgz#acdbdbe21e2dc2531e99f432ba5cccd074d6ca05" + integrity sha512-8tNyKyDMCoMCYxkRIv6ZrBrBbYejrwpqOD3frAbZaim8JbI3D+x88mPfi32QeV3s3xQAdSsONCv0Ickrk/a2Cg== + +ses@^0.18.5, ses@^0.18.7: + version "0.18.7" + resolved "https://registry.yarnpkg.com/ses/-/ses-0.18.7.tgz#8abeb65732845642c2d1a284e415ef11957fb489" + integrity sha512-bcQ3CY8jh+UnumfdDZCPDgRA9hWk6acpL1d7ecQLMOdMkqKkP0yv2b6Sd9AVxuxbu4cXMt158epbpwkV/5sIfw== + dependencies: + "@endo/env-options" "^0.1.3" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -9584,6 +11460,11 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -9669,6 +11550,11 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + stack-utils@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" @@ -10010,6 +11896,11 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" + integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== + table@^6.0.9: version "6.7.1" resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" @@ -10022,6 +11913,17 @@ table@^6.0.9: string-width "^4.2.0" strip-ansi "^6.0.0" +table@^6.7.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -10048,6 +11950,13 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tdigest@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced" + integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== + dependencies: + bintrees "1.0.2" + temp-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" @@ -10099,6 +12008,11 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -10233,6 +12147,16 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +triple-beam@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" + integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -10253,6 +12177,11 @@ tslib@^2.0.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.1.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -10750,6 +12679,13 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -10963,6 +12899,30 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +winston-transport@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" + integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" + integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.1.0" + is-stream "^2.0.0" + logform "^2.2.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.4.0" + word-wrap@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" @@ -10984,6 +12944,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -11023,6 +12992,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^7: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + ws@^7.2.0: version "7.5.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" @@ -11033,6 +13007,14 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xstream@^11.14.0: + version "11.14.0" + resolved "https://registry.yarnpkg.com/xstream/-/xstream-11.14.0.tgz#2c071d26b18310523b6877e86b4e54df068a9ae5" + integrity sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw== + dependencies: + globalthis "^1.0.1" + symbol-observable "^2.0.3" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From 92909d6bb7645104b57d31a12c772a2d358c3d38 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Wed, 9 Aug 2023 18:18:56 -0500 Subject: [PATCH 03/44] docs: smart wallet Dapp architecture - test: marshal.toCapData is like JSON.stringify on steroids - style: markdown lint - smart wallet, board marshalling, ... - arch diagram: check .mmd into assets/; generate .svg - specifying offers - published.wallet.* topics - invitation spec sequence diagram in source form --- main/.vuepress/config.js | 1 + main/.vuepress/themeConfig/nav.js | 127 ++--- .../getting-started/assets/inv-spec.mmd | 11 + .../getting-started/assets/inv-spec.svg | 1 + .../getting-started/assets/sw-dapp-arch.mmd | 25 + .../getting-started/assets/sw-dapp-arch.svg | 1 + .../assets/vstorage-brand-q.mmd | 18 + .../assets/vstorage-brand-q.svg | 1 + .../getting-started/assets/zoe-simp.mmd | 14 + .../getting-started/assets/zoe-simp.svg | 1 + main/guides/getting-started/contract-rpc.md | 410 +++++++++++++++ main/guides/js-programming/eventual-send.md | 63 ++- main/guides/js-programming/far.md | 65 ++- snippets/test-distributed-programming.js | 5 +- snippets/test-marshal.js | 486 ++++++++++++++++++ 15 files changed, 1132 insertions(+), 97 deletions(-) create mode 100644 main/guides/getting-started/assets/inv-spec.mmd create mode 100644 main/guides/getting-started/assets/inv-spec.svg create mode 100644 main/guides/getting-started/assets/sw-dapp-arch.mmd create mode 100644 main/guides/getting-started/assets/sw-dapp-arch.svg create mode 100644 main/guides/getting-started/assets/vstorage-brand-q.mmd create mode 100644 main/guides/getting-started/assets/vstorage-brand-q.svg create mode 100644 main/guides/getting-started/assets/zoe-simp.mmd create mode 100644 main/guides/getting-started/assets/zoe-simp.svg create mode 100644 main/guides/getting-started/contract-rpc.md create mode 100644 snippets/test-marshal.js diff --git a/main/.vuepress/config.js b/main/.vuepress/config.js index 943c1e3e6..811dabf78 100644 --- a/main/.vuepress/config.js +++ b/main/.vuepress/config.js @@ -119,6 +119,7 @@ module.exports = { children: [ '/guides/getting-started/', '/guides/getting-started/start-a-project.html', + '/guides/getting-started/contract-rpc.html', '/guides/getting-started/deploying.html', '/guides/getting-started/syncing-up.html', ], diff --git a/main/.vuepress/themeConfig/nav.js b/main/.vuepress/themeConfig/nav.js index a023bca8b..6b6ffa558 100644 --- a/main/.vuepress/themeConfig/nav.js +++ b/main/.vuepress/themeConfig/nav.js @@ -19,6 +19,11 @@ module.exports = [ ariaLabel: 'Starting a Project Menu', link: '/guides/getting-started/start-a-project', }, + { + text: 'Smart Wallet Dapp Architecture', + ariaLabel: 'Smart Wallet Dapp Architecture Menu', + link: '/guides/getting-started/contract-rpc', + }, { text: 'Deploying Smart Contracts', ariaLabel: 'Deploying Menu', @@ -29,72 +34,72 @@ module.exports = [ ariaLabel: 'Syncing Up to Mainnet', link: '/guides/getting-started/syncing-up', }, - ] + ], }, { - text: 'Agoric Components', - ariaLabel: 'Agoric Components Menu', - items: [ + text: 'Agoric Components', + ariaLabel: 'Agoric Components Menu', + items: [ { - text: 'Agoric CLI', - ariaLabel: 'Agoric CLI', - link: '/guides/agoric-cli/', + text: 'Agoric CLI', + ariaLabel: 'Agoric CLI', + link: '/guides/agoric-cli/', }, { - text: 'JavaScript Framework', - ariaLabel: 'JavaScript Framework', - link: '/guides/js-programming/', + text: 'JavaScript Framework', + ariaLabel: 'JavaScript Framework', + link: '/guides/js-programming/', }, { - text: 'Wallet', - ariaLabel: 'Wallet', - link: '/guides/wallet/' + text: 'Wallet', + ariaLabel: 'Wallet', + link: '/guides/wallet/', }, { - text: 'ERTP', - ariaLabel: 'ERTP', - link: '/guides/ertp/' + text: 'ERTP', + ariaLabel: 'ERTP', + link: '/guides/ertp/', }, { - text: 'Zoe', - ariaLabel: 'Zoe', - link: '/guides/zoe/' + text: 'Zoe', + ariaLabel: 'Zoe', + link: '/guides/zoe/', }, { - text: 'Permissioned Contract Deployment', - ariaLabel: 'Permissioned Contract Deployment', - link: '/guides/coreeval/' - }, + text: 'Permissioned Contract Deployment', + ariaLabel: 'Permissioned Contract Deployment', + link: '/guides/coreeval/', + }, { - text: 'Example Zoe Contracts', - ariaLabel: 'Example Zoe Contracts', - link: '/guides/zoe/contracts/' + text: 'Example Zoe Contracts', + ariaLabel: 'Example Zoe Contracts', + link: '/guides/zoe/contracts/', }, { - text: 'Deployed Zoe Contracts', - ariaLabel: 'Deployed Zoe Contracts', - link: '/guides/zoe/actual-contracts/' + text: 'Deployed Zoe Contracts', + ariaLabel: 'Deployed Zoe Contracts', + link: '/guides/zoe/actual-contracts/', }, { - text: 'Agoric Dapps', - ariaLabel: 'Agoric Dapps', - link: '/guides/dapps/' + text: 'Agoric Dapps', + ariaLabel: 'Agoric Dapps', + link: '/guides/dapps/', }, - ] + ], }, { text: 'API Reference', ariaLabel: 'API Reference Menu', items: [ { - text: 'Wallet API', - ariaLabel: 'Wallet API Menu', - link: '/reference/wallet-api', + text: 'Wallet API', + ariaLabel: 'Wallet API Menu', + link: '/reference/wallet-api', }, { - text: 'ERTP API', - ariaLabel: 'ERTP API Menu', - link: '/reference/ertp-api/', + text: 'ERTP API', + ariaLabel: 'ERTP API Menu', + link: '/reference/ertp-api/', }, { text: 'REPL API', @@ -106,38 +111,42 @@ module.exports = [ ariaLabel: 'ZOE API Menu', link: '/reference/zoe-api/', }, - ] + ], }, { text: 'Glossary', ariaLabel: 'Glossary Menu', - link: '/glossary/' + link: '/glossary/', }, { text: 'New Features', ariaLabel: 'New Features Menu', - items: [ + items: [ { text: 'Governance', ariaLabel: 'Governance Internal Documentation', - link: 'https://github.com/Agoric/agoric-sdk/blob/master/packages/governance/docs/' + link: + 'https://github.com/Agoric/agoric-sdk/blob/master/packages/governance/docs/', }, { text: 'Patterns', ariaLabel: 'Patterns Source Code Link', - link: 'https://github.com/Agoric/agoric-sdk/blob/master/packages/store/src/types.js' + link: + 'https://github.com/Agoric/agoric-sdk/blob/master/packages/store/src/types.js', }, { text: 'Smart Wallet', ariaLabel: 'Smart Wallet Internal Documentation', - link: 'https://github.com/Agoric/agoric-sdk/blob/master/packages/smart-wallet/README.md' - }, + link: + 'https://github.com/Agoric/agoric-sdk/blob/master/packages/smart-wallet/README.md', + }, { text: 'Upgrading Contracts', ariaLabel: 'Upgrade Contracts Doc Link', - link: 'https://github.com/Agoric/agoric-sdk/blob/master/packages/zoe/README.md#upgrade' - }, - ] + link: + 'https://github.com/Agoric/agoric-sdk/blob/master/packages/zoe/README.md#upgrade', + }, + ], }, { text: 'Learn More', @@ -146,23 +155,23 @@ module.exports = [ { text: 'Agoric', ariaLabel: 'Agoric Homepage Link', - link: 'https://agoric.com/' - }, + link: 'https://agoric.com/', + }, { text: 'Papers', ariaLabel: 'Papers Page Link', - link: 'https://agoric.com/papers/' + link: 'https://agoric.com/papers/', }, { text: 'YouTube', ariaLabel: 'Agoric YouTube Channel Page Link', - link: 'https://www.youtube.com/channel/UCpY91oQLh_Lp0mitdZ5bYWg/' - }, + link: 'https://www.youtube.com/channel/UCpY91oQLh_Lp0mitdZ5bYWg/', + }, { text: 'Github', ariaLabel: 'Agoric Github Link', - link: 'https://github.com/Agoric/' - } - ] - }, -] + link: 'https://github.com/Agoric/', + }, + ], + }, +]; diff --git a/main/guides/getting-started/assets/inv-spec.mmd b/main/guides/getting-started/assets/inv-spec.mmd new file mode 100644 index 000000000..8640daab5 --- /dev/null +++ b/main/guides/getting-started/assets/inv-spec.mmd @@ -0,0 +1,11 @@ +sequenceDiagram + + box darksalmon Hardened JS VM + participant walletFactory + participant zoe + participant contract + end + + walletFactory->>contract: makeBattleInvitation('troll') + contract-->>zoe: makeInvitation(...) + zoe-->>walletFactory: invitation diff --git a/main/guides/getting-started/assets/inv-spec.svg b/main/guides/getting-started/assets/inv-spec.svg new file mode 100644 index 000000000..263579e17 --- /dev/null +++ b/main/guides/getting-started/assets/inv-spec.svg @@ -0,0 +1 @@ +Hardened JS VMwalletFactoryzoecontractmakeBattleInvitation('troll')makeInvitation(...)invitationwalletFactoryzoecontract \ No newline at end of file diff --git a/main/guides/getting-started/assets/sw-dapp-arch.mmd b/main/guides/getting-started/assets/sw-dapp-arch.mmd new file mode 100644 index 000000000..aad4c7c03 --- /dev/null +++ b/main/guides/getting-started/assets/sw-dapp-arch.mmd @@ -0,0 +1,25 @@ +sequenceDiagram + actor client + + box aqua Cosmos SDK layer + participant chain + end + + box darksalmon Hardened JS VM + participant walletFactory + participant zoe + participant contract + end + + client->>chain: Offer tx + chain->>walletFactory: Offer Spec + walletFactory->>+zoe: Offer + walletFactory-->>chain: Offer status + client->>+chain: vstorage query + chain-->>-client: Offer status + zoe->>+contract: Proposal + contract-->>-zoe: reallocations + zoe-->>-walletFactory: payouts + walletFactory-->>chain: Offer status + client->>+chain: vstorage query + chain-->>-client: Offer status diff --git a/main/guides/getting-started/assets/sw-dapp-arch.svg b/main/guides/getting-started/assets/sw-dapp-arch.svg new file mode 100644 index 000000000..20c506b32 --- /dev/null +++ b/main/guides/getting-started/assets/sw-dapp-arch.svg @@ -0,0 +1 @@ +Hardened JS VMCosmos SDK layerclientchainwalletFactoryzoecontractOffer txOffer SpecOfferOffer statusvstorage queryOffer statusProposalreallocationspayoutsOffer statusvstorage queryOffer statusclientchainwalletFactoryzoecontract \ No newline at end of file diff --git a/main/guides/getting-started/assets/vstorage-brand-q.mmd b/main/guides/getting-started/assets/vstorage-brand-q.mmd new file mode 100644 index 000000000..c78f98817 --- /dev/null +++ b/main/guides/getting-started/assets/vstorage-brand-q.mmd @@ -0,0 +1,18 @@ +sequenceDiagram + actor client + + box aqua Cosmos SDK layer + participant chain + end + + box darksalmon Hardened JS VM + participant chainStorage + participant agoricNames + end + + agoricNames->>chainStorage: E(root).makeChildNode('brand') + chainStorage-->>agoricNames: brandNode + agoricNames-->>chainStorage: E(invbrandNodeNode).setValue('...IST...') + chainStorage->>chain: change(
'published.agoricNames.brand',
'...IST...') + client->>chain: Data(
'published.agoricNames.brand') + chain-->>client: '...IST...' diff --git a/main/guides/getting-started/assets/vstorage-brand-q.svg b/main/guides/getting-started/assets/vstorage-brand-q.svg new file mode 100644 index 000000000..74dfbf442 --- /dev/null +++ b/main/guides/getting-started/assets/vstorage-brand-q.svg @@ -0,0 +1 @@ +Hardened JS VMCosmos SDK layerclientchainchainStorageagoricNamesE(root).makeChildNode('brand')brandNodeE(invbrandNodeNode).setValue('...IST...')change('...brand', '...IST...')query('...brand')'...IST...'clientchainchainStorageagoricNames \ No newline at end of file diff --git a/main/guides/getting-started/assets/zoe-simp.mmd b/main/guides/getting-started/assets/zoe-simp.mmd new file mode 100644 index 000000000..f21302cfd --- /dev/null +++ b/main/guides/getting-started/assets/zoe-simp.mmd @@ -0,0 +1,14 @@ +sequenceDiagram +box darksalmon Zoe API (simplified) + + participant agent + participant zoe + participant contract +end + + agent->>+zoe: offer(invitation, {give, want}, pmts) + zoe-->>agent: userSeat + zoe->>+contract: {give, want} + contract-->>-zoe: reallocate() + agent->>zoe: E(userSeat).getPayouts() + zoe-->>-agent: payout payments diff --git a/main/guides/getting-started/assets/zoe-simp.svg b/main/guides/getting-started/assets/zoe-simp.svg new file mode 100644 index 000000000..01f4de7a2 --- /dev/null +++ b/main/guides/getting-started/assets/zoe-simp.svg @@ -0,0 +1 @@ +Zoe API (simplified)agentzoecontractoffer(invitation, {give, want}, pmts)userSeat{give, want}reallocate()E(userSeat).getPayouts()payout paymentsagentzoecontract \ No newline at end of file diff --git a/main/guides/getting-started/contract-rpc.md b/main/guides/getting-started/contract-rpc.md new file mode 100644 index 000000000..b8d11516e --- /dev/null +++ b/main/guides/getting-started/contract-rpc.md @@ -0,0 +1,410 @@ +# Smart Wallet Dapp Architecture + +The [Agoric Platform](../platform/) consists of smart contracts +and services such as [Zoe](../zoe/) running in a [Hardened JavaScript](../js-programming/hardened-js.md) VM running on top of a Cosmos SDK consensus layer. Clients interact with the consensus layer by making +queries and submitting messages in signed transactions. In the Smart +Wallet Architecture, dapps consist of + +- Hardened JavaScript smart contracts +- clients that can submit offers and query status via the consensus layer + +![smart wallet dapp sequence diagram](./assets/sw-dapp-arch.svg) + +1. A client formats an offer, signs it, and broadcasts it. +2. The offer is routed to the `walletFactory` contract, which finds (or creates) the `smartWallet` object associated with the signer's addres and uses it to execute the offer. +3. The `smartWallet` calls `E(zoe).offer(...)` and monitors the status of + the offer, emitting it for clients to query. +4. Zoe escrows the payments and forwards the proposal to the contract + indicated by the offer. +5. The contract tells Zoe how to reallocate assets. +6. Zoe ensures that the reallocations respect offer safety and then provides payouts accordingly. +7. The client's query tells it that the payouts are available. + +## Signing and Broadcasting Offers + +One way to sign and broadcast offers is with the `agd tx ...` command. For example: + +```sh +agd tx swingset wallet-action --allow-spend "$ACTION" \ + --chain-id=agoriclocal --from=acct1 +``` + + + +Another is using a wallet signing UI such as Keplr via the [Keplr API](https://docs.keplr.app/api/). + +Given sufficient care with key management, a [cosmjs SigningStargateClient](https://cosmos.github.io/cosmjs/latest/stargate/classes/SigningStargateClient.html) or any other client that can deliver a [agoric.swingset.MsgWalletSpendAction](https://github.com/Agoric/agoric-sdk/blob/mainnet1B/golang/cosmos/proto/agoric/swingset/msgs.proto#L70) to a +[Cosmos SDK endpoint](https://docs.cosmos.network/main/core/grpc_rest) works. + +```proto +message MsgWalletSpendAction { + bytes owner = 1; + string spend_action = 2; +} +``` + + + +## Querying VStorage + +[VStorage](https://github.com/Agoric/agoric-sdk/tree/master/golang/cosmos/x/vstorage#readme) (for "Virtual Storage") is a key-value store that is +read-only for clients of the consensus layer. +From within the JavaScript VM, it is accessed via a `chainStorage` API with a node at each +key that is write-only; a bit like a `console`. + +![vstorage query diagram](./assets/vstorage-brand-q.svg) + +The protobuf definition is [agoric.vstorage.Query](https://github.com/Agoric/agoric-sdk/blob/mainnet1B/golang/cosmos/proto/agoric/vstorage/query.proto#L11): + +```proto +service Query { + // Return an arbitrary vstorage datum. + rpc Data(QueryDataRequest) returns (QueryDataResponse) { + option (google.api.http).get = "/agoric/vstorage/data/{path}"; + } + + // Return the children of a given vstorage path. + rpc Children(QueryChildrenRequest) + returns (QueryChildrenResponse) { + option (google.api.http).get = "/agoric/vstorage/children/{path}"; + } +} +``` + +We can issue queries using, `agd query ...`: + +```sh +$ agd query vstorage children 'published.agoricNames' + +children: +- brand +- installation +- instance +... +``` + +The [Agoric CLI](../agoric-cli/) `follow` command supports vstorage +query plus some of the marshalling conventions discussed below: + +```sh +$ agoric follow -lF :published.agoricNames.brand +[ + [ + "BLD", + slotToVal("board0566","Alleged: BLD brand"), + ], + [ + "IST", + slotToVal("board0257","Alleged: IST brand"), + ], +... +] +``` + +::: tip vstorage viewer by p2p + +The [vstorage-viewer](https://github.com/p2p-org/p2p-agoric-vstorage-viewer) contributed by p2p is often _very_ handy: + +[![vstorage viewer screenshot](https://user-images.githubusercontent.com/150986/259798595-40cd22f0-fa01-43a9-b92a-4f0f4813a4f6.png)](https://p2p-org.github.io/p2p-agoric-vstorage-viewer/#https://devnet.rpc.agoric.net/|published,published.agoricNames|) + +::: + +## Specifying Offers + +Recall that for an agent within the JavaScript VM, +[E(zoe).offer(...)](../../reference/zoe-api/zoe.md#e-zoe-offer-invitation-proposal-paymentkeywordrecord-offerargs) takes an `Invitation` and optionally a `Proposal` with `{ give, want }`, a `PaymentKeywordRecord`, and `offerArgs`; it returns a `UserSeat` from which we can [getPayouts()](../../reference/zoe-api/user-seat.md#e-userseat-getpayouts). + +![Zoe API diagram, simplified](./assets/zoe-simp.svg) + +In the Smart Wallet architecture, a client uses an `OfferSpec` to +tell its `SmartWallet` how to conduct an offer. +It includes an `invitationSpec` to say what invitation to pass to Zoe. For example: + +<<< @/snippets/test-marshal.js#exInvitationSpec + +Here the `SmartWallet` calls `E(zoe).getPublicFacet(instance)` and then +uses the `publicInvitationMaker` and `invitationArgs` to call the contract's +public facet. + +![InvitationSpec sequence diagram](./assets/inv-spec.svg) + + + +::: tip InvitationSpec Patterns +For more `InvitationSpec` examples, see [How to make an offer from a dapp via the smart wallet? \(InvitationSpec Patterns\) · #8082](https://github.com/Agoric/agoric-sdk/discussions/8082) July 2023 +::: + +The client fills in the proposal, which instructs the `SmartWallet` +to withdraw corresponding payments to send to Zoe. + +<<< @/snippets/test-marshal.js#exBridgeAction + +But recall the `spend_action` field in `MsgWalletSpendAction` is a string. +In fact, the expected string in this case is of the form: + +<<< @/snippets/test-marshal.js#exSpendActionCk + +We recognize `"method":"executeOffer"` and such, but +`body:`, `slots:`, and `$1.Alleged: Gold Brand` need further explanation. + +### Marshalling Amounts and Instances + +To start with, amounts include `bigint`s. The `@endo/marshal` API handles those: + +<<< @/snippets/test-marshal.js#marshal-json-steroids + +To marshal brands and instances, recall from the discussion of [marshal in eventual send](../js-programming/eventual-send.md#e-and-marshal-a-closer-look) +how remotables are marshalled with a translation table. + +The [Agoric Board](../../reference/repl/board.md) is a well-known name service that issues +plain string identifiers for object identities and other passable _keys_ (that is: passable values excluding promises and errors). +Contracts and other services can use its table of identifiers as a marshal +translation table: + +<<< @/snippets/test-marshal.js#boardMarshal + +To reverse the process, clients can mirror the on-chain board translation +table by synthesizing a remotable for each reference marker received: + +<<< @/snippets/test-marshal.js#makeBoardContext + +Now we can take results of vstorage queries for `Data('published.agoricNames.brand')` and `Data('published.agoricNames.instance')` unmarshal ("ingest") them: + +<<< @/snippets/test-marshal.js#useBoardContext + +And now we have all the pieces of the `BridgeAction` above. +The marshalled form is: + +<<< @/snippets/test-marshal.js#exBridgeActionEq + +We still don't quite have a single string for the `spend_action` field. +We need to `stringify` the `CapData`: + +<<< @/snippets/test-marshal.js#exSpendAction + +And now we have the `spend_action` in the expected form: + +<<< @/snippets/test-marshal.js#exSpendActionCk + +The wallet factory can now `JSON.parse` this string +into `CapData` and unmarshal it using a board marshaller +to convert board ids back into brands, instances, etc. + +## Smart Wallet VStorage Topics + +Each smart wallet has a node under `published.wallet`: + +```sh +$ agd query vstorage children published.wallet +children: +- agoric1h4d3mdvyqhy2vnw2shq4pm5duz5u8wa33jy6cl +- agoric1qx2kqqdk80fdasldzkqu86tg4rhtaufs00na3y +- agoric1rhul0rxa2z829a6xkrvuq8m8wjwekyduv7dzfj +... +``` + +Smart wallet clients should start by getting the **current** state +at `published.${ADDRESS}.current` and then subscribe to **updates** +at `published.${ADDRESS}`. For example, we can use `agoric follow -lF` +to get the latest `.current` record: + +```sh +$ agoric follow -lF :published.wallet.agoric1h4d3mdvyqhy2vnw2shq4pm5duz5u8wa33jy6cl.current +{ + liveOffers: [], + offerToPublicSubscriberPaths: [ + [ + "openVault-1691526589332", + { + vault: "published.vaultFactory.managers.manager0.vaults.vault2", + }, + ], + ], + offerToUsedInvitation: [ + [ + "openVault-1691526589332", + { + brand: slotToVal("board0074","Alleged: Zoe Invitation brand"), + value: [ + { + description: "manager0: MakeVault", + handle: slotToVal(null,"Alleged: InvitationHandle"), + installation: slotToVal("board05815","Alleged: BundleIDInstallation"), + instance: slotToVal("board00360","Alleged: InstanceHandle"), + }, + ], + }, + ], + ], + purses: [ + { + balance: { + brand: slotToVal("board0074"), + value: [], + }, + brand: slotToVal("board0074"), + }, + ], +} +``` + +Then we can use `agoric follow` without any options to +get a stream of updates as they appear. + +```sh +agoric follow :published.wallet.agoric1h4d3mdvyqhy2vnw2shq4pm5duz5u8wa33jy6cl +... +{ + status: { + id: "closeVault-1691526597848", + invitationSpec: { + invitationMakerName: "CloseVault", + previousOffer: "openVault-1691526589332", + source: "continuing", + }, + numWantsSatisfied: 1, + payouts: { + Collateral: { + brand: slotToVal("board05557","Alleged: ATOM brand"), + value: 13000000n, + }, + Minted: { + brand: slotToVal("board0257","Alleged: IST brand"), + value: 215000n, + }, + }, + proposal: { + give: { + Minted: { + brand: slotToVal("board0257"), + value: 5750000n, + }, + }, + want: {}, + }, + result: "your vault is closed, thank you for your business", + }, + updated: "offerStatus", +} +``` + +Note that status updates are emitted at several points in the handling of +each offer: + +- when the `getOfferResult()` promise settles +- when the `numWantsSatisfied()` promise settles +- when the payouts have been deposited. + +And we may get `balance` updates at any time. + +The data published via vstorage are available within the JavaScript VM +via the [getPublicTopics](https://github.com/Agoric/agoric-sdk/blob/mainnet1B/packages/smart-wallet/src/smartWallet.js#L585) API. + +The [CurrentWalletRecord](https://github.com/Agoric/agoric-sdk/blob/mainnet1B/packages/smart-wallet/src/smartWallet.js#L71-L76) type is: + +```ts +{ + purses: Array<{brand: Brand, balance: Amount}>, + offerToUsedInvitation: Array<[ offerId: string, usedInvitation: Amount ]>, + offerToPublicSubscriberPaths: Array<[ offerId: string, publicTopics: { [subscriberName: string]: string } ]>, + liveOffers: Array<[import('./offers.js').OfferId, import('./offers.js').OfferStatus]>, +} +``` + +And [UpdateRecord](https://github.com/Agoric/agoric-sdk/blob/mainnet1B/packages/smart-wallet/src/smartWallet.js#L80-L83) is: + +```ts + { updated: 'offerStatus', status: import('./offers.js').OfferStatus } + | { updated: 'balance'; currentAmount: Amount } + | { updated: 'walletAction'; status: { error: string } } +``` + +Both of those types include [OfferStatus](https://github.com/Agoric/agoric-sdk/blob/mainnet1B/packages/smart-wallet/src/offers.js#L21C14-L26C5) by reference: + +```ts +import('./offers.js').OfferSpec & { + error?: string, + numWantsSatisfied?: number + result?: unknown | typeof UNPUBLISHED_RESULT, + payouts?: AmountKeywordRecord, +} +``` + +## VBank Assets and Cosmos Bank Balances + +Note that balances of assets such as **IST** and **BLD** are already +available via consensus layer queries to the Cosmos SDK [bank module](https://docs.cosmos.network/main/modules/bank). + +```sh +$ agd query bank balances agoric1h4d3mdvyqhy2vnw2shq4pm5duz5u8wa33jy6cl -o json | jq .balances +[ + { + "denom": "ibc/BA313C4A19DFBF943586C0387E6B11286F9E416B4DD27574E6909CABE0E342FA", + "amount": "100000000" + }, + { + "denom": "ubld", + "amount": "10000000" + }, + { + "denom": "uist", + "amount": "215000" + } +] +``` + +They are not published redundantly in vstorage and nor does the +smart wallet emit `balance` updates for them. + +To get the correspondence between certain cosmos denoms (chosen by governance) +and their ERTP brands, issuers, and display info such as `decimalPlaces`, +see `published.agoricNames.vbankAsset`: + +```sh +agoric follow -lF :published.agoricNames.vbankAsset +[ + [ + "ibc/BA313C4A19DFBF943586C0387E6B11286F9E416B4DD27574E6909CABE0E342FA", + { + brand: slotToVal("board05557","Alleged: ATOM brand"), + denom: "ibc/BA313C4A19DFBF943586C0387E6B11286F9E416B4DD27574E6909CABE0E342FA", + displayInfo: { + assetKind: "nat", + decimalPlaces: 6, + }, + issuer: slotToVal("board02656","Alleged: ATOM issuer"), + issuerName: "ATOM", + proposedName: "ATOM", + }, + ], + [ + "ubld", + { + brand: slotToVal("board0566","Alleged: BLD brand"), + denom: "ubld", + displayInfo: { + assetKind: "nat", + decimalPlaces: 6, + }, + issuer: slotToVal("board0592","Alleged: BLD issuer"), + issuerName: "BLD", + proposedName: "Agoric staking token", + }, + ], + [ + "uist", + { + brand: slotToVal("board0257","Alleged: IST brand"), + denom: "uist", + displayInfo: { + assetKind: "nat", + decimalPlaces: 6, + }, + issuer: slotToVal("board0223","Alleged: IST issuer"), + issuerName: "IST", + proposedName: "Agoric stable token", + }, + ], +... +] +``` diff --git a/main/guides/js-programming/eventual-send.md b/main/guides/js-programming/eventual-send.md index 2b58b1af6..f340c9935 100644 --- a/main/guides/js-programming/eventual-send.md +++ b/main/guides/js-programming/eventual-send.md @@ -1,8 +1,7 @@ # Eventual Send with E() In web browsers, a common pattern of remote communication is using the -[asynchronous fetch API with promises]( -https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing#promises): +[asynchronous fetch API with promises](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing#promises): <<< @/snippets/test-distributed-programming.js#asyncFetch @@ -12,7 +11,7 @@ a [deploy script](../getting-started/deploying.md) may want to use the [Zoe Service API](/reference/zoe-api/zoe.md) to install a contract on a blockchain. But the deploy script cannot call `zoe.install(bundle)`, because it does not have local access to the `zoe` object. However, the deploy -script is given a `zoe` *remote presence*. To call methods on the +script is given a `zoe` _remote presence_. To call methods on the actual Zoe object, the deploy script can do: ```js @@ -32,16 +31,16 @@ use too much compute time or heap space. The smart contracts also run in separat What happens when we call `E(zoe).install(bundle)` is an _eventual send_: - 1. A message consisting of the method name `install` +1. A message consisting of the method name `install` with the `bundle` argument [marshaled](./far.md) to a flat string and queued for delivery to the vat that `zoe` comes from. - 2. `E(zoe).install(bundle)` returns a promise for the result. - 3. The `then` and `catch` methods queue callbacks for when the promise +2. `E(zoe).install(bundle)` returns a promise for the result. +3. The `then` and `catch` methods queue callbacks for when the promise is resolved or rejected. Execution continues until the stack is empty and thus this turn through the event loop completes. - 4. _Eventually_ `zoe` responds, which results in a new message +4. _Eventually_ `zoe` responds, which results in a new message in this vat's message queue and a new turn through the event loop. The message is de-serialized and the results are passed to the relevant callback. @@ -51,9 +50,9 @@ must be _asynchronous_. The `E()` wrapper works with: - - Remote presences (local proxies for objects in remote vats). - - Local objects (in the same vat). - - Promises for remote presences or local objects. +- Remote presences (local proxies for objects in remote vats). +- Local objects (in the same vat). +- Promises for remote presences or local objects. In all cases, `E(x).method(...args)` returns a promise. @@ -68,13 +67,55 @@ round trip suffices for both method calls. The `E()` function creates a forwarder that doesn't know what methods the remote object has. If you misspell or incorrectly capitalize the method name, -the local environment can't tell you've done so. You'll only find out at runtime when the +the local environment can't tell you've done so. You'll only find out at runtime when the remote object complains that it doesn't know that method. If an ordinary synchronous call (`obj.method()`) fails because the method doesn't exist, the `obj` may be remote, in which case `E(obj).method()` might work. ::: +## E() and Marshal: A Closer Look + +If you just want to use the SDK to write smart contracts, **feel +free to skip this section**. But in case you're working +on something that requires more detailed understanding, +let's take a look at how `E(x).method(...args)` is marshalled. + +In [@endo/marshal](https://github.com/endojs/endo/tree/master/packages/marshal#readme) docs, we see: + +> The `marshal` module helps with conversion of "capability-bearing data", in +> which some portion of the structured input represents "pass-by-proxy" or +> "pass-by-presence" objects that should be serialized into values referencing +> special "slot identifiers". The `toCapData()` function returns a "CapData" +> structure: an object with a `body` containing a serialization of the input data, +> and a `slots` array holding the slot identifiers. `fromCapData()` takes this +> CapData structure and returns the object graph. There is no generic way to +> convert between pass-by-presence objects and slot identifiers, so the marshaller +> is parameterized with a pair of functions to create the slot identifiers and turn +> them back into proxies/presences. + +For example, we can marshal a remotable counter using the slot identifier `c1`: + +<<< @/snippets/test-marshal.js#marshal-remotable + +Each end of a connection between vats typically keeps +a table to translate slots to capabilities and back: + +<<< @/snippets/test-marshal.js#marshal-table + +Each call to `E(rx)` makes a proxy for the reciver `rx`; +each `E(rx).p` property reference invokes the `get` proxy trap. +From the `get` trap, `E` returns a function that queues +`rx`, `p`, and its arguments (in marshalled form) and returns a promise: + +<<< @/snippets/test-marshal.js#marshal-messages-e + +Now we can see the result in some detail. Note the way the promise from +`E(zoe).install()` is passed to `E(zoe).startInstance()`. + +<<< @/snippets/test-marshal.js#marshal-messages + ::: tip Watch: How Agoric Solves Reentrancy Hazards (November 2020) for more on eventual send and remote communication + ::: diff --git a/main/guides/js-programming/far.md b/main/guides/js-programming/far.md index 916d75ea8..39d3cb813 100644 --- a/main/guides/js-programming/far.md +++ b/main/guides/js-programming/far.md @@ -1,33 +1,38 @@ - # Far(), Remotable, and Marshaling -To export objects such as from the [Example Secure JavaScript Code](./hardened-js.md#example-hardened-javascript-code) -to make them available to other vats, mark them as _remotable_ using [Far](#far-api): +Let's look more closely at an [eventual send](./eventual-send.md) between vats: + +![counter remote presence](../assets/remote-presence-fig.svg) + +In the exporting vat, we'll take the `makeCounter` [Hardened JavaScript example](./hardened-js.md#example-hardened-javascript-code) and refine it to make _remotable_ counters +by marking them with [Far](#far-api): -<<< @/snippets/test-distributed-programming.js#importFar <<< @/snippets/test-distributed-programming.js#makeFarCounter ## Marshaling by Copy or by Presence Recall that the first step in an [eventual send](./eventual-send.md#eventual-send) is -to _marshal_ the method name and arguments (i.e., to make them into a single string). -This is like [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), but it can handle values such as `undefined` and `BigInt`s. -Also, while many forms of data are copied between vats, -remotables are marshalled so that they become remote _presences_ when unmarshaled: +to _marshal_ the method name and arguments. [Marshalling](https://en.wikipedia.org/wiki/Marshalling_%28computer_science%29) is transforming a data structure into a format suitable for storage or transmission. +The [@endo/marshal](https://github.com/endojs/endo/tree/master/packages/marshal#readme) package uses [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON), but it can handle +Javascript values that cannot be expressed directly as JSON, +such as `undefined` and `BigInt`s. -![counter remote presence](../assets/remote-presence-fig.svg) +<<< @/snippets/test-marshal.js#marshal-json-steroids +Also, while many forms of data are copied between vats, +remotables are marshalled so that they become remote _presences_ when unmarshaled. Another vat can then make and use the exported counters: <<< @/snippets/test-distributed-programming.js#useFarCounter ## Pass Styles and harden -Calls to remote presences must only contain *passable* arguments and return *passable* results. +Calls to remote presences must only contain _passable_ arguments and return _passable_ results. There are three kinds of passables: - * Remotables: objects with methods that can be called using `E()` eventual send notation. - * Pass-by-copy data, such as numbers or hardened structures. - * Promises for passables. + +- Remotables: objects with methods that can be called using `E()` eventual send notation. +- Pass-by-copy data, such as numbers or hardened structures. +- Promises for passables. Every object exported from a smart contract, such as `publicFacet` or `creatorFacet`, must be passable. All objects used in your contract's external API must @@ -47,39 +52,47 @@ is `20n` in the local vat but `10n` in the remote vat. (Worse: the remote vat might be the same as the local vat.) Requiring `harden()` for pass-by-copy data leads to behavior across vats that is straightforward to reason about. -### passStyleOf API +## passStyleOf API + +<<< @/snippets/test-distributed-programming.js#import-pass-style `passStyleOf(passable)` - - `passable` `{Passable}` - - Returns: `{PassStyle}` + +- `passable` `{Passable}` +- Returns: `{PassStyle}` A Passable is a hardened value that may be marshalled. It is classified as one of the following `PassStyle` values: - * Atomic pass-by-copy primitives (`"undefined" | "null" | - "boolean" | "number" | "bigint" | "string" | "symbol"`). - * Pass-by-copy containers that contain other Passables (`"copyArray" | "copyRecord"`). - * Special cases, which also contain other Passables (`"error"`). - * So-called `PassableCap` leafs (`"remotable" | "promise"`). + +- Atomic pass-by-copy primitives (`"undefined" | "null" | "boolean" | "number" | "bigint" | "string" | "symbol"`). +- Pass-by-copy containers that contain other Passables (`"copyArray" | "copyRecord"`). +- Special cases, which also contain other Passables (`"error"`). +- So-called `PassableCap` leafs (`"remotable" | "promise"`). ::: tip Check `passStyleOf` when handling untrusted structured data Just as you would use `typeof` to check that an argument is a string or number, use `passStyleOf` when you expect, say, a `copyRecord`; this prevents malicious clients from playing tricks with cyclic data etc. ::: + ## Far() API +<<< @/snippets/test-distributed-programming.js#importFar + `Far(farName, object-with-methods)` + - `farName` `{ String }` -- `object-with-methods` ` { Object }` `[remotable={}]` -- Returns: A `Remotable` object. +- `object-with-methods` `{ Object }` `[remotable={}]` +- Returns: A `Remotable` object. -The `farName` parameter gives the `Remotable` an *interface name* for debugging purposes, which only shows -up when logged through the `console`, for example with `console.log`. +The `farName` parameter gives the `Remotable` an _interface name_ for debugging purposes, which only shows +up when logged through the `console`, for example with `console.log`. -The `object-with-methods` parameter should be an object whose properties are the functions serving +The `object-with-methods` parameter should be an object whose properties are the functions serving as the object's methods. The `Far()` function marks an object as remotable. `Far()` also: + - Hardens the object. - Checks that all property values are functions and throws an error otherwise. - Accessors (i.e., `get()` and `set()`) are not allowed. diff --git a/snippets/test-distributed-programming.js b/snippets/test-distributed-programming.js index 4a6f8ab2e..a14d10823 100644 --- a/snippets/test-distributed-programming.js +++ b/snippets/test-distributed-programming.js @@ -4,8 +4,11 @@ import { test } from './prepare-test-env-ava.js'; import { E } from '@endo/eventual-send'; // #region importFar -import { Far, passStyleOf } from '@endo/marshal'; +import { Far } from '@endo/far'; // #endregion importFar +// #region import-pass-style +import { passStyleOf } from '@endo/pass-style'; +// #endregion import-pass-style test('remote counter', async t => { const assert = cond => t.true(cond); diff --git a/snippets/test-marshal.js b/snippets/test-marshal.js new file mode 100644 index 000000000..15657e79b --- /dev/null +++ b/snippets/test-marshal.js @@ -0,0 +1,486 @@ +// @ts-check +/* eslint-disable import/order -- https://github.com/endojs/endo/issues/1235 */ +import { test } from './prepare-test-env-ava.js'; + +import { E, Far } from '@endo/far'; +import { passStyleOf } from '@endo/pass-style'; +import { makeCopyBag } from '@endo/patterns'; + +import { makeFakeBoard } from '@agoric/vats/tools/board-utils.js'; + +// #region marshal-import +import { makeMarshal } from '@endo/marshal'; +import { AmountMath } from '@agoric/ertp'; + +/** @type {import('@endo/marshal').MakeMarshalOptions} */ +const smallCaps = { serializeBodyFormat: 'smallcaps' }; +// #endregion marshal-import + +const { Fail } = assert; + +test.serial('marshal.toCapData is like JSON.stringify on steroids', async t => { + // #region marshal-json-steroids + const m = makeMarshal(undefined, undefined, smallCaps); + + const stuff = harden([1, 2, 3n, undefined, NaN]); + const capData = m.toCapData(stuff); + t.deepEqual(m.fromCapData(capData), stuff); + // #endregion marshal-json-steroids + t.deepEqual(capData, { + body: '#[1,2,"+3","#undefined","#NaN"]', + slots: [], + }); + + t.deepEqual( + capData.body.replace(/^#/, ''), + JSON.stringify([1, 2, '+3', '#undefined', '#NaN']), + ); + + t.log(capData.body); +}); + +/** + * "The marshal module helps with conversion of "capability-bearing data", + * in which some portion of the structured input represents + * "pass-by-proxy" or "pass-by-presence" objects. + * These should be serialized into markers that + * refer to special "reference identifiers". + * These identifiers are collected in an array, + * and the serialize() function returns a two-element structure + * known as "CapData": a body that contains the usual string, + * and a new slots array that holds the reference identifiers. + * unserialize() takes this CapData structure and + * returns the object graph. + * The marshaller must be taught (with a pair of callbacks) + * how to create the presence markers, + * and how to turn these markers back into proxies/presences." + * -- https://github.com/endojs/endo/tree/master/packages/marshal#readme + */ +test.serial( + 'remotables are passed between vats using reference identifiers', + async t => { + // #region marshal-remotable + const makeCounter = () => { + let count = 0; + return Far('counter', { + incr: () => (count += 1), + decr: () => (count -= 1), + }); + }; + + const counter1 = makeCounter(); + t.is(passStyleOf(counter1), 'remotable'); + + const valToSlot = new Map([[counter1, 'c1']]); + const slotToVal = new Map([['c1', counter1]]); + const convertValToSlot = v => valToSlot.get(v); + const convertSlotToVal = (slot, _iface) => slotToVal.get(slot); + const m = makeMarshal(convertValToSlot, convertSlotToVal, smallCaps); + + const capData = m.toCapData(counter1); + t.deepEqual(capData, { + body: '#"$0.Alleged: counter"', + slots: ['c1'], + }); + t.deepEqual(m.fromCapData(capData), counter1); + // #endregion marshal-remotable + t.log(capData); + }, +); + +// #region marshal-table +const makeSlot1 = (val, serial) => { + const prefix = Promise.resolve(val) === val ? 'promise' : 'object'; + return `${prefix}${serial}`; +}; + +const makeTranslationTable = (makeSlot, makeVal) => { + const valToSlot = new Map(); + const slotToVal = new Map(); + + const convertValToSlot = val => { + if (valToSlot.has(val)) return valToSlot.get(val); + const slot = makeSlot(val, valToSlot.size); + valToSlot.set(val, slot); + slotToVal.set(slot, val); + return slot; + }; + + const convertSlotToVal = (slot, iface) => { + if (slotToVal.has(slot)) return slotToVal.get(slot); + if (makeVal) { + const val = makeVal(slot, iface); + valToSlot.set(val, slot); + slotToVal.set(slot, val); + return val; + } + throw Error(`no such ${iface}: ${slot}`); + }; + + return harden({ convertValToSlot, convertSlotToVal }); +}; +// #endregion marshal-table + +/** + * Marshal is an important part of [how eventual send works][1]. + * + * "What happens when we call `E(zoe).install(bundle)` is an _eventual send_: + * 1. A message consisting of the method name `install` + * with the `bundle` argument is marshaled..." + * + * [1]: https://docs.agoric.com/guides/js-programming/eventual-send.html#eventual-send + */ +test.serial( + 'marshal messages from E(zoe).install(), E(zoe).startInstance()', + async t => { + // #region marshal-messages-e + const { convertValToSlot, convertSlotToVal } = makeTranslationTable( + makeSlot1, + ); + const m = makeMarshal(convertValToSlot, convertSlotToVal, smallCaps); + + const outgoingMessageQueue = []; + // E work-alike for illustration + const E2 = obj => + new Proxy(obj, { + get: (target, method) => (...args) => { + const msg = harden([target, [method, args]]); + outgoingMessageQueue.push(m.toCapData(msg)); + return new Promise(_resolve => {}); + }, + }); + // #endregion marshal-messages-e + + // #region marshal-messages + const zoe = Far('ZoeService', {}); + const bundle = { bundleFormat: 'xyz' }; + const installationP = E2(zoe).install(bundle); + const startP = E2(zoe).startInstance(installationP); + harden(startP); // suppress usage lint + t.deepEqual(outgoingMessageQueue, [ + { + body: + '#["$0.Alleged: ZoeService",["install",[{"bundleFormat":"xyz"}]]]', + slots: ['object0'], + }, + { + body: '#["$0.Alleged: ZoeService",["startInstance",["&1"]]]', + slots: ['object0', 'promise1'], + }, + ]); + // #endregion marshal-messages + t.log(outgoingMessageQueue[1]); + }, +); + +/** @typedef {import('@endo/pass-style').Remotable} Brand */ + +/** + * The Agoric Board is a well-known name service that issues + * plain string identifiers for object identities. + * + * The board supports using its table of identifiers as a marshal + * translation table. (Promises and Errors are not supported. Only + * passable _keys_.) + * + * Data published to vstorage is typically marshalled using a board marshaler. + */ +test.serial( + 'game "contract" publishes data using board translation table', + async t => { + const vstorage = new Map(); + const makeVstorageNode = key => { + return harden({ + setValue: val => vstorage.set(key, val), + makeChildNode: name => makeVstorageNode(`${key}.${name}`), + }); + }; + + // NOTE: this test mock passes {body, slots} to .setValue() + // The real vstorage .setValue() only takes a string. + // So currently, we JSON.stringify({body, slots}) again. + /** + * @param {StorageNode} parent + * @param {string} name + * @param {Marshaller} m + */ + const makeRecorder = (parent, name, m) => { + const node = parent.makeChildNode(name); + return harden({ + write: async val => node.setValue(await E(m).toCapData(val)), + }); + }; + + const theBoard = makeFakeBoard(); + + const asset = { + gold: { brand: Far('Gold Brand', {}) }, + victory: { brand: Far('Victory Brand', {}) }, + }; + + // #region boardMarshal + /** @type {Record} */ + const brands = { + gold: asset.gold.brand, + victory: asset.victory.brand, + }; + + // explicitly register brand using the board API + const victoryBrandBoardId = await E(theBoard).getId(brands.victory); + t.is(victoryBrandBoardId, 'board0371'); + + // When the publishing marshaler needs a reference marker for something + // such as the gold brand, it issues a new board id. + const pubm = E(theBoard).getPublishingMarshaller(); + const brandData = await E(pubm).toCapData(brands); + t.deepEqual(brandData, { + body: `#${JSON.stringify({ + gold: '$0.Alleged: Gold Brand', + victory: '$1.Alleged: Victory Brand', + })}`, + slots: ['board0592', 'board0371'], + }); + // #endregion boardMarshal + + const contract1 = async (node, rom) => { + const treasure = Far('Treasure', {}); + + const { add, make } = AmountMath; + const mkSemi = (brand, entries) => make(brand, makeCopyBag(entries)); + let victories = mkSemi(brands.victory, []); + + // Use the read-only marshaler to avoid publishing sensitive things such as treasure. + const statusTopic = makeRecorder(node, 'status', rom); + await statusTopic.write({ victories }); + + let rng = 5; + const doBattle = async enemy => { + await null; + rng = (rng * rng) % 7; + if (rng > 3) { + victories = add(victories, mkSemi(brands.victory, [[enemy, 1n]])); + // oops! we didn't mean to publish treasure! + await statusTopic.write({ treasure, victories }); + } + }; + + return harden({ publicFacet: { doBattle } }); + }; + + // The board provides a read-only marshaler to avoid accidentally publishing + // sensitive things. + const rom = E(theBoard).getReadonlyMarshaller(); + + const node1 = makeVstorageNode('player1'); + const game1 = await contract1(node1, rom); + await E(game1.publicFacet).doBattle('troll'); + await E(game1.publicFacet).doBattle('witch'); + await E(game1.publicFacet).doBattle('giant'); + await E(game1.publicFacet).doBattle('troll'); + await E(game1.publicFacet).doBattle('giant'); + + t.log(vstorage.get('player1.status')); + + t.deepEqual( + [...vstorage.entries()], + [ + [ + 'player1.status', + { + body: `#${JSON.stringify({ + treasure: '$0.Alleged: Treasure', + victories: { + brand: '$1.Alleged: Victory Brand', + value: { + '#tag': 'copyBag', + payload: [ + ['troll', '+1'], + ['giant', '+2'], + ], + }, + }, + })}`, + // Note the read-only marshaler emits a `null` slot + // for unpublished remotables. + slots: [null, 'board0371'], + }, + ], + ], + ); + }, +); + +/** + * Off-chain clients can mirror the on-chain board translation table + * by synthesizing a remotable for each reference marker received. + */ +// #region makeBoardContext +const makeBoardContext = () => { + const synthesizeRemotable = (_slot, iface) => + Far(iface.replace(/^Alleged: /, ''), {}); + + const { convertValToSlot, convertSlotToVal } = makeTranslationTable( + slot => Fail`unknown id: ${slot}`, + synthesizeRemotable, + ); + const marshaller = makeMarshal(convertValToSlot, convertSlotToVal, smallCaps); + + /** Read-only board work-alike. */ + const board = harden({ + getId: convertValToSlot, + getValue: convertSlotToVal, + }); + + return harden({ + board, + marshaller, + /** + * Unmarshall capData, synthesizing a Remotable for each boardID slot. + * + * @type {(cd: import("@endo/marshal").CapData) => unknown } + */ + ingest: marshaller.fromCapData, + }); +}; +// #endregion makeBoardContext + +test.serial('ingest data from vstorage', async t => { + // From vstorage, we might get brand info such as: + const brandData = { + body: `#${JSON.stringify({ + gold: '$0.Alleged: Gold Brand', + victory: '$1.Alleged: Victory Brand', + })}`, + slots: ['board0592', 'board0371'], + }; + + // We can unmarshal it, using a translation table that we keep around: + const clientContext = makeBoardContext(); + const brands = clientContext.ingest(brandData); + + // The values of the object will be fresh object identities, + // but we know what the keys look like. + t.deepEqual(Object.keys(brands), ['gold', 'victory']); + + // The we might get player status: + const playerStatus = { + body: `#${JSON.stringify({ + treasure: '$0.Alleged: Treasure', + victories: { + brand: '$1.Alleged: Victory Brand', + value: { + '#tag': 'copyBag', + payload: [ + ['troll', '+1'], + ['giant', '+2'], + ], + }, + }, + })}`, + // Note the read-only marshaler emits a `null` slot + // for unpublished remotables. + slots: [null, 'board0371'], + }; + + // We don't get a stable object identity for the treasure, + // but let's look at the rest: + const { treasure: _null, ...rest } = clientContext.ingest(playerStatus); + t.log(rest); + + // Now we can treat the unmarshalled data as ordinary passable data, + // including object identities such as brands.victory: + t.deepEqual(rest, { + victories: { + brand: brands.victory, + value: makeCopyBag([ + ['troll', 1n], + ['giant', 2n], + ]), + }, + }); +}); + +test.serial('assemble an offer spend action', async t => { + const instanceQueryResult = { + body: `#${JSON.stringify({ + game1: '$0.Alleged: Instance', + })}`, + slots: ['board123'], + }; + // #region useBoardContext + const clientContext = makeBoardContext(); + + const brandQueryResult = { + body: `#${JSON.stringify({ + gold: '$1.Alleged: Gold Brand', + victory: '$0.Alleged: Victory Brand', + })}`, + slots: ['board0371', 'board32342'], + }; + const brands = clientContext.ingest(brandQueryResult); + const { game1: instance } = clientContext.ingest(instanceQueryResult); + // #endregion useBoardContext + + t.log('reference info from vstorage', { instance, brands }); + + // #region exInvitationSpec + /** @type {import('@agoric/smart-wallet').InvitationSpec} */ + const invitationSpec = { + source: 'contract', + instance, + publicInvitationMaker: 'makeBattleInvitation', + invitationArgs: ['troll'], + }; + // #endregion exInvitationSpec + + // #region exBridgeAction + /** @type {import('@agoric/smart-wallet').BridgeAction} */ + const action = harden({ + method: 'executeOffer', + offer: { + id: 'battle7651', + invitationSpec, + proposal: { + give: { Gold: AmountMath.make(brands.gold, 100n) }, + }, + }, + }); + // #endregion exBridgeAction + + // #region exBridgeActionEq + t.deepEqual(clientContext.marshaller.toCapData(action), { + body: `#${JSON.stringify({ + method: 'executeOffer', + offer: { + id: 'battle7651', + invitationSpec: { + instance: '$0.Alleged: Instance', + invitationArgs: ['troll'], + publicInvitationMaker: 'makeBattleInvitation', + source: 'contract', + }, + proposal: { + give: { + Gold: { brand: '$1.Alleged: Gold Brand', value: '+100' }, + }, + }, + }, + })}`, + slots: ['board123', 'board32342'], + }); + // #endregion exBridgeActionEq + t.log(action.offer); + + // #region exSpendAction + const spendAction = JSON.stringify( + clientContext.marshaller.toCapData(action), + ); + // #endregion exSpendAction + + // #region exSpendActionCk + t.regex(spendAction, /^{"body":"#.*","slots":\["board123","board32342"\]}$/); + const goldStuff = + '\\"brand\\":\\"$1.Alleged: Gold Brand\\",\\"value\\":\\"+100\\"'; + t.true(spendAction.includes(goldStuff)); + // #endregion exSpendActionCk +}); From 94e0bd5b40e05313a530ab44ff7ae0c18f0a626d Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Mon, 21 Aug 2023 10:45:44 -0500 Subject: [PATCH 04/44] docs: link marshal discussion to office hours recording --- main/guides/getting-started/contract-rpc.md | 6 ++++++ main/guides/js-programming/eventual-send.md | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/main/guides/getting-started/contract-rpc.md b/main/guides/getting-started/contract-rpc.md index b8d11516e..9d4b767f3 100644 --- a/main/guides/getting-started/contract-rpc.md +++ b/main/guides/getting-started/contract-rpc.md @@ -149,6 +149,12 @@ We recognize `"method":"executeOffer"` and such, but ### Marshalling Amounts and Instances +::: tip Watch: Office Hours Discussion of Marshal + +- [Office Hours: ... marshalling w/board ids, ... \#8069](https://github.com/Agoric/agoric-sdk/discussions/8069) July 2023 + +::: + To start with, amounts include `bigint`s. The `@endo/marshal` API handles those: <<< @/snippets/test-marshal.js#marshal-json-steroids diff --git a/main/guides/js-programming/eventual-send.md b/main/guides/js-programming/eventual-send.md index f340c9935..6ace9cb3c 100644 --- a/main/guides/js-programming/eventual-send.md +++ b/main/guides/js-programming/eventual-send.md @@ -75,6 +75,12 @@ If an ordinary synchronous call (`obj.method()`) fails because the method doesn' ## E() and Marshal: A Closer Look +::: tip Watch: Office Hours Discussion of Marshal + +- [Office Hours: ... marshalling w/board ids, ... \#8069](https://github.com/Agoric/agoric-sdk/discussions/8069) July 2023 + +::: + If you just want to use the SDK to write smart contracts, **feel free to skip this section**. But in case you're working on something that requires more detailed understanding, From 307c859f29eb7dcd7ccf6b126dfca46cb9ff5380 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 17:28:43 +0000 Subject: [PATCH 05/44] chore(deps-dev): bump ses from 0.16.0 to 0.16.1 Bumps [ses](https://github.com/endojs/endo) from 0.16.0 to 0.16.1. - [Commits](https://github.com/endojs/endo/compare/ses@0.16.0...@endo/eventual-send@0.16.1) --- updated-dependencies: - dependency-name: ses dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index b9c10387b..311a1738f 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "eslint-plugin-prettier": "^3.4.0", "import-meta-resolve": "^1.1.1", "prettier": "^1.19.1", - "ses": "^0.16.0", + "ses": "^0.16.1", "vuepress": "^1.8.2", "vuepress-plugin-check-md": "0.0.2" }, diff --git a/yarn.lock b/yarn.lock index ed0bc8ab2..83e58369f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6296,7 +6296,7 @@ eslint@^7.27.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -esm@agoric-labs/esm#Agoric-built, "esm@github:agoric-labs/esm#Agoric-built": +esm@agoric-labs/esm#Agoric-built: version "3.2.25" resolved "https://codeload.github.com/agoric-labs/esm/tar.gz/3603726ad4636b2f865f463188fcaade6375638e" @@ -10986,8 +10986,9 @@ rollup@^2.47.0: optionalDependencies: fsevents "~2.3.2" -"rollup@github:endojs/endo#rollup-2.7.1-patch-1": +rollup@endojs/endo#rollup-2.7.1-patch-1: version "2.70.1-endo.1" + uid "54060e784a4dbe77b6692f17344f4d84a198530d" resolved "https://codeload.github.com/endojs/endo/tar.gz/54060e784a4dbe77b6692f17344f4d84a198530d" optionalDependencies: fsevents "~2.3.2" @@ -11192,10 +11193,10 @@ ses@^0.15.1, ses@^0.15.11, ses@^0.15.17, ses@^0.15.9: resolved "https://registry.yarnpkg.com/ses/-/ses-0.15.17.tgz#84e20cd08fb294989c6499942d220bd6604e1884" integrity sha512-T8XKsR5LGV57ilyqE4InFJKWVniEEFGai0CjuVJPju9LvnjYPXvZ7V8jP7sGtJ500ApRVgNBCu+5ZcSUhiuXig== -ses@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/ses/-/ses-0.16.0.tgz#d405fff49daa8e19b1b04344e2a752c9268afa72" - integrity sha512-2oKCzl3W24aNqBifLWWEh3OGd+78+SY1GVKWP5ogrqBOjs3X1trwE2akx5pX4M1MFExqXoJGav1CmCq2KBMqOg== +ses@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/ses/-/ses-0.16.1.tgz#b447aa8a6f7f5826e2ba8ff66a566f1e1a74cca6" + integrity sha512-yLgBL+IC7cfMz7DWlTAbZaZUVavO3U14G8gqKPE0jqQgxkvN1KDx3c1UW9q/YgU3UpxuhxnjUMOfyAfEF9pNxA== ses@^0.17.0: version "0.17.1" From 1bae452f2b3cb9cd45cfc65fc319a8dbfadd6ae6 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Wed, 23 Aug 2023 16:34:06 -0500 Subject: [PATCH 06/44] rationale for upper-case constraint on Zoe keywords --- main/reference/zoe-api/zoe-data-types.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/main/reference/zoe-api/zoe-data-types.md b/main/reference/zoe-api/zoe-data-types.md index e6f93f2f1..edd19dad2 100644 --- a/main/reference/zoe-api/zoe-data-types.md +++ b/main/reference/zoe-api/zoe-data-types.md @@ -83,7 +83,9 @@ is exclusively yours and no one else has access to it. ## Keyword -An ASCII identifier string that must begin with an upper case letter. +An ASCII identifier string that must begin with an upper case letter +in order to avoid collisions with JavaScript properties such as `toString`. +(For more detail, see [Why do Zoe keywords have to start with a capital letter? #8241](https://github.com/Agoric/agoric-sdk/discussions/8241).) ## MutableQuote @@ -161,4 +163,4 @@ can be created using the helper functions Of course, as with any JavaScript datatype, you can also manually create **TransferParts**. If you manually create a **TransferPart** and don't include the *fromSeat*, *toSeat*, and/or *fromAmounts* fields, you'll need to set the missing fields to **undefined**. (Note that if you don't -include the *toAmounts* field, there's no need to set it to **undefined**; you can simply omit it.) \ No newline at end of file +include the *toAmounts* field, there's no need to set it to **undefined**; you can simply omit it.) From 4c6b5287137f03ecf8dfceaf0d29d441f4320c53 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Wed, 23 Aug 2023 16:41:04 -0500 Subject: [PATCH 07/44] NaN, Infinity also excluded from Zoe keywords --- main/reference/zoe-api/zoe-data-types.md | 1 + 1 file changed, 1 insertion(+) diff --git a/main/reference/zoe-api/zoe-data-types.md b/main/reference/zoe-api/zoe-data-types.md index edd19dad2..80308ab16 100644 --- a/main/reference/zoe-api/zoe-data-types.md +++ b/main/reference/zoe-api/zoe-data-types.md @@ -86,6 +86,7 @@ is exclusively yours and no one else has access to it. An ASCII identifier string that must begin with an upper case letter in order to avoid collisions with JavaScript properties such as `toString`. (For more detail, see [Why do Zoe keywords have to start with a capital letter? #8241](https://github.com/Agoric/agoric-sdk/discussions/8241).) +`NaN` and `Infinity` are also not allowed as keywords. ## MutableQuote From 7d8111f9d314fe40ac149e60090720f07fc645f7 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Thu, 24 Aug 2023 11:03:13 -0500 Subject: [PATCH 08/44] Update "deployed contracts" for vaults release --- main/guides/zoe/actual-contracts/README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/main/guides/zoe/actual-contracts/README.md b/main/guides/zoe/actual-contracts/README.md index 5c4ee2894..e0b771378 100644 --- a/main/guides/zoe/actual-contracts/README.md +++ b/main/guides/zoe/actual-contracts/README.md @@ -2,9 +2,21 @@ -The following Zoe contracts are automatically deployed on-chain: - +In the [mainnet-1B release of agoric-sdk](https://github.com/Agoric/agoric-sdk/releases/tag/mainnet1B-rc3), the chain is configured to automatically deploy the following Zoe contracts: | Contract | Description | | --- | --- | +| centralSupply | used to initialize the vbank IST purse balance based on supply reported from the cosmos x/bank module | +| mintHolder | use to hold mints for BLD as well as inter-chain assets such as ATOM, USDC, and USDT | +| committee | represents the Economic Committee that governs Inter Protocol parameters | +| binaryVoteCounter | instantiated once for each question that a committee votes on | +| econCommitteeCharter | controls what questions can be put to the economic committee | +| contractGovernor | each governed contract is started by starting its governor | | [PSM](./PSM.md) | The Parity Stability Module (PSM) supports efficiently minting and burning Inter Stable Tokens (ISTs) in exchange for approved external stable tokens. | +| vaultFactory| allows users to mint IST backed by collateral such as ATOM; hands off vaults to auctioneer when value of collateral in a vault falls below a governed threshold | +| auctioneer | auctions collateral from liquidated vaults | +| fluxAggregator | aggregates prices from oracle oeprators | +| scaledPriceAuthoriy | provides prices for tradeable assets such as ATOM in terms of idealized "oracle ATOM" prices from oracle operators | +| feeDistributor | collects fees from Inter Protocol contracts and distributes to reserve and/or stakers | +| assetReserve | holds assets in reserve to back IST | +| walletFactory | executes Zoe offers on behalf of users | From a8c77a93bbfd86e4c54ee539a80402e701054095 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Thu, 24 Aug 2023 11:05:41 -0500 Subject: [PATCH 09/44] cite community post on inter protocol contracts --- main/guides/zoe/actual-contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/guides/zoe/actual-contracts/README.md b/main/guides/zoe/actual-contracts/README.md index e0b771378..27474b48a 100644 --- a/main/guides/zoe/actual-contracts/README.md +++ b/main/guides/zoe/actual-contracts/README.md @@ -2,7 +2,7 @@ -In the [mainnet-1B release of agoric-sdk](https://github.com/Agoric/agoric-sdk/releases/tag/mainnet1B-rc3), the chain is configured to automatically deploy the following Zoe contracts: +In the [mainnet-1B release of agoric-sdk](https://github.com/Agoric/agoric-sdk/releases/tag/mainnet1B-rc3), the chain is configured to automatically deploy the following Zoe contracts. A [community post on Inter Protocol Vaults Contract Implementations](https://community.agoric.com/t/inter-protocol-vaults-contract-implementations/261) has a high level description. | Contract | Description | | --- | --- | From ee3d780c6407e86cfca4bef6216e530c3b0ba3b7 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Sat, 2 Sep 2023 17:43:21 -0600 Subject: [PATCH 10/44] test(snippets): permit Date "secure mode" exceptions --- snippets/test-hardened-js.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/snippets/test-hardened-js.js b/snippets/test-hardened-js.js index dbbf1359f..d7162be77 100644 --- a/snippets/test-hardened-js.js +++ b/snippets/test-hardened-js.js @@ -57,9 +57,15 @@ test('assign to frozen property fails', t => { ); }); -test('Date.now() always returns NaN', t => { +test('Date.now() is not available or returns NaN', t => { const c1 = new Compartment(); - t.is(c1.evaluate(`Date.now()`), NaN); + try { + t.is(c1.evaluate(`Date.now()`), NaN, 'legacy Date.now() is NaN'); + } catch (e) { + // New API: throws instead of NaN. + t.throws(() => c1.evaluate(`Date.now()`), { message: /^secure mode\b/ }); + t.throws(() => c1.evaluate(`new Date()`), { message: /^secure mode\b/ }); + } }); test('Math.random is not available', t => { From 8118f906bace756842fefce71f5704cadd801603 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Tue, 5 Sep 2023 18:47:32 -0600 Subject: [PATCH 11/44] docs(hardened-js): describe new (and old) `Date.now()` behaviour --- main/guides/js-programming/hardened-js.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/main/guides/js-programming/hardened-js.md b/main/guides/js-programming/hardened-js.md index de617d7d9..b8dce5b31 100644 --- a/main/guides/js-programming/hardened-js.md +++ b/main/guides/js-programming/hardened-js.md @@ -254,11 +254,13 @@ calls for limiting globals to immutable data and deterministic functions (eliminating "ambient authority" in the diagram above). Hardened JavaScript includes a `Compartment` API for enforcing OCap discipline. -Only the [standard, built-in objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) -such as `Object`, `Array`, and `Promise` are globally available by default -(with an option for carefully controlled exceptions such as `console.log`). -With the default `Compartment` options, the non-deterministic `Math.random` -is not available and `Date.now()` always returns `NaN`. +Only the [standard, built-in +objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) +such as `Object`, `Array`, and `Promise` are globally available by default (with +an option for carefully controlled exceptions such as `console.log`). With the +default `Compartment` options, the non-deterministic `Math.random` and +`Date.now()` are not available. (Earlier versions of Hardened JavaScript +provided `Compartment` with a `Date.now()` that always returned `NaN`.) Almost all existing JS code was written to run under Node.js or inside a browser, so it's easy to conflate the environment features with JavaScript itself. For From 6a466d6a5dd0abbb741308072d093ce02059fe76 Mon Sep 17 00:00:00 2001 From: Dean Tribble Date: Thu, 7 Sep 2023 15:01:01 -0700 Subject: [PATCH 12/44] doc(integration): initial integration support doc --- main/guides/integration/assets/cosmos-api.png | Bin 0 -> 142664 bytes main/guides/integration/chain-integration.md | 50 ++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 main/guides/integration/assets/cosmos-api.png create mode 100644 main/guides/integration/chain-integration.md diff --git a/main/guides/integration/assets/cosmos-api.png b/main/guides/integration/assets/cosmos-api.png new file mode 100644 index 0000000000000000000000000000000000000000..81521be43031f0df7fc7231d9c4aac44b736bbd3 GIT binary patch literal 142664 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�Ez9TR*CSw%Dwer$2T#S6#ab-XPmxS#ydA)jWUhb z-yLNs5gPaIRsrc!pSQC_FS=#N`AKvG;%wR!MsKxPJpiaaqNTamF2#lZ>V4Q2bLPm+ zaotzG`&-{7jP3L4Ge4#Qgs82rXWYL8ag+fd#yUvZ%DG7wzq646hiYSK{%I0z`iswVA zcB8(kR~-{|Vfb z?^>40lX>sC+THR+%knoGS9uCLjt(wY37RDT81H?Dms;A2kjuqEdLER7CN6j>p zRyL{+D(@@ba9h4JjTyoYJC;A$h2_{O>@1W!`2fvms|IxxM)@AQON}e80KZT;ta`RB zH?M(dOLA{kZA(*4T<`#B7t8kB=}y#~H49c4lXPXK_ON zb1Cssm7rRcTB5`~UsATncU3O_Rl*;NKU@fzl-&LPp06>ZKcHP=hj+0&GB6+K`X#@G zuVwD*GN^TI-&uHbuQb4*@Y47;+hmGerC!n^kOq9f5)@&bkiJ6N5P9I8RS_JL9C!{e z&x5ROcC(OV+uOY|LTx!#J=t5Rtis9RG%l$T6rOMvW*3jT8JsVv20&-2j+(Qzz)x3u zAY0ufb073O4v!VPedHO?#UK<}a2HJ5`J4w%;M0S=&m7^&7gX zl-g6w%_SsSWZShB*BzHOF=#N`pd6U?%p%!dExxr#Wwf{*ML&bcWEs0CIcScUT7&1_ z(LgOqt#R}CgM-{iP%!t`P#hkI+Ozt)XnpdQo!v=?bB zNlE%>et7ThTUh@&PYYC6F3%3h7jb@jd576}cizdD(n3oKYcAF4&di5ZUmd-aB^pco zv`itv0tKx#%acm1WZB)+)n?`>MJ&c9Y#6~;3fe^NgmXrDLCNxp(Ki|6aEWc}<@?F? zn6N9oTADCtWk>H`ZQUo{JsOSScVZ1k>2rHy?@Tv@^F(hZ9O!3p~a&z$3-r|XbML}z?8gW?@q?V&6%{|=JPSDf@LCIbKgfJsDkByH@8p3M=Y~~1VWGnI?qU@N4lQ?+_hf+biS02q)KRxdiLvrBhZ< zst2F8sw7cn+ zyi-ghPz{wGL^Him=>AHdy)T)XYU)_s_;+fICcD7P#1P*~zF2lhdC zDWbg1NMB>_-T3ZTA)BmB{Wo_b!lHK3?P0c{OOD)yWZQc&$^br6XDqy!AuMe!%W#?I z2rY4h&u&joYp+IYxDDf&lIR=#`5D&{wX@w8UJhBFMjlg0qrQx^5r9s~tY4FnRVu*( z5PVW9SQrFdBRbV2XmU;)8Tfn&=WFaBhA-Gw?pu(nIu-Wnyi;0y!K;9wn>WN2aK`k! z?kW>TZGS7+!zCn6Wy!(%b)X1{$Am*SdNi1zkYhFFgV zG;y?rw?KI;92V2RaaeNQAc`?aKX6uTJCF2z@|uu7kqedU+k^d`>9xatR6%c&zDgfu zeyOYbfV6h+;fpPNr6%UXXJO<%rpxM?;qJra&josk2iv@gJN5ut#xpUUcP^*gkuwg5 za2rkE*GF%t>vw(U)X!bKhWe6IzP_Og>$i%lN}0KV9GfV-1fT8{OkLRA9(z6QwOHwH zixNdiNDB7Ipf+AvL{7m?huK+L_QW|im^ouiAi4juRwJKL%61$I4s8KwLcI*T!m}+I zRW&%u>g8t#HZh>~U1_^3+o4zGBXOuFrsfITXoV+!)gHMa%ZN1l)%C znzi~p-%%2%ahc5;g89MLP0Se=hm=F90aCWD);j|efoB}`t_`61zYVoHx_rsEgc~m? z`u?^Pe{RM)yf z5a`i|4Hjx%IXUnlIS*P&di10`BWpk;yn}8(&YS`&D?`uEa8%A{+$vwvO-k0g`=&*ejo#W@6{&r&DiJo`kE3{X zER60-HTyQ=Kj z*CBiqJ2M4Y174#6UASci_uUj z6h0XE&@S<+f8e!qzEq-51a?}7T^#2WCK2)_l_eIt5bxR+#K7=sc$^t_P;9>FUOHQT z%lnvD4ohSvbJ(p!==L48{<5;EIk~G-2D}|;7aMOAhm;j08<#qIUi&~15tFv(P+ZXr zKbk*}Tar)8Jr_LrBMeG)F$rZ$U!qv9(BJCU$HN-63xf*L>!Vp;G(6YXxI%h_jwG)} zZ;0VGDDbhDB6SP9u~1S`mJHpvx`)GfBcE2O+dV(cY=Ak@6Dc(p2{BeA-R?0}+DS)7 z2hf&zbmaBy0kqUJMZ(ae_CB7H^qOG(c+Tk8XH2Ft&Lm=cXh4OQ2q%523XkrPz)meD zPP*__cW9;lNIGc}>G#MnyPQ(X%>aH)yLad~u>_^j4jWK4#zMI|8>l3t3t$wD$WCTx zzYaA+9||BQvSmx9Pu92crxR~bz!*Mwlx)WA^)2t7{Y}y**Y;x*o33SRZrliEwo;JR zolkL0#1-YtN%fbizSS4?y;hLXz56YQmg3ehTM`j;+Y! z*M9XdVbm|vcv*qHFc>)@I+snO)1;OQYYSm3r0%}XSV^pAo0qx~Gp1`R?qKF?v3G39V>&^`*hN{1!hS|?`z#ld z)=;NK#mE);oGYDvx_LZj6l*pkcithTT5w9Ea;0Em(8~aGr63ioWjS6#r}}m@efwc; zg(K|)%zgDn*R!^EdrrWcO}_eEpZtC?0RD9-T*&!k6ES?-P*+{OQ5V1swB{U!^jnpT zrEnwmQJkCTiJ5VLy4RVpjrXo60?OKuQF{p;g1L4L0s6MHOw}iNOVBI=t3KK-GNjF` z#j@i^Uq&fUz_Shisu_Gvd#yX%Xge&qoquO1a!T~u<4Kd5#`B~M7IuLkWyCfneOXIj z0o`j94%O^~dtU2^+6{;+6tMr9Cvq**ud0X3It|KU#C$DTIr6;zm`6%N+SlNx_?LV~eK_bxXkE)1zTkvL0P z#0KMJUtP-RWo~ zcBf#RX}BdsVl!bn81;}e2m%F#gj@|_%yuE~QvxnGD;-2ai0GvHT$oLS_!UJN$`-I< z4%ycV12wYvFyRi_+Ok90vCVSBizO3bpBbV1-Ju!HX?x!i9gowc-+3$L)qEIuCY!MxaDB**+tZJfD0t~4=r2*q{Wf`TzLGXd zHu1ea+VP2vg7hI6QgtWF9%&9a3S(wR1emYyhZ=mL13bEFIF-M`JdNJS>O+cdEUnY~ z^?0bbjcb?EMn~K!9Zc>eg*HOgWdNY#W@(^bhfi7nN1v_A8ebHc`I*~&UUq;(lGF_Z z>CkG5j=bp|kMN&}=787vRGhy+A0uzc!=isdj06 zyvYHPJHLI0bw~pxl~`pm8%+^5G;T0l-ILO55)S3rC5+%iDAG4X3P2|weO>)%N;JG&}xs^_T+qvs4nQaqdeJ~AWO#e}x zM_vhVY+2LTW;AF`Cb&5gW_Sy(GxRX5=~JMOvWBs!Zd#;~5>CL-rvCxBE#u0UL-Nad z>x0Rkpru-iyWbvqE~;Lsr+u;!4N>#LZlvOn^dtQ{T8ZUlKC4xk>nq**%WVK)HA6;c z=BlKR)3CD^-_EzNmfV_@J~o38yE8X*b~kGG1GScmn*%H;mb2*G1!lb-H!}-;&EL4K z-=XTuk$vX=Ze>G&uFcL&^!i0j{eC0T^Ai(|7TBQZ;Lvxco$T6saXP*sv{Iqt1;B$b z1xrugI{3mO0a?@tw@hj@VIp_+J zHKqC&6jqkS&4gGCNvga~c8G+egL(Z-5jK_2teHm9l9OoP= zb+;$r&S+jQ#mBPe3@to!E~Ly43`wWVE#C<-t1TuAv)U8!V3a7gFNNC(**GUmfHLws za~DRR;VdPqOIU`q`TXs+|Z3H$+9@LmG3xg=g z`@G&}QPpi;?U-g#Q_Ngmv${<_-*-<*I;B1rmFY6WOm`pASNf$b(usM{Ncg!-Stry6 z%7MifbtxRNzLn8u+^4S-ZtI_!EYhV9HP*w3Sav6F9`xWB}4%oW8Q>&fsgJ6$NHTiQ5TGeAAWejx^ogDyG`-rUW|lA;;ybdZh`B}kE$Ha={_7N`GhdaZL%~8&?OmWb zaPVRX1&g9HCn#5;#i<%XwM!(YmhOJFJ)KOn08tai-PZCKp;|C$PdyX@o9}kE&%VU` zo>)i!6%Hx1z_52RAj#N_$nj(i9e$ZkbGJMi?oy*jMB}{HhQ~d*0C@ zTI>}pOFIH%*wvaH7H5Aid+#Fz02K0>7)>;UGT;Z^40GIjQFE5zK4 zTvWD#Kk1anTy}xmkZgZ|}ni9EwN#uEX@3qvG2#2F$NHKlVhUvF*YW&m(+?)MtgA42tg!*{q?NY546jB-sY$ z9w~dDur}Iw$s1>;u{+%Cuz2W zD{0oUxe{z2OYG>OEIW(Ap$og38$hwtww8?{UzMTSefm_3L9)g&Jm151bm+s@?!6$7&_mq-gI`Z^)XA?r<>0vg;$@D7yP41;i_Is*6q-zWz z&#qiGU@%*;VL&?sAe;46XAo=Y(4!3-*1W51E%#(hkX4VCoZLD&q^_^08@4@w99}PR#QfCuM+$X>z1~}eaPuYu-Vcr0&DJ_QrkSqt z`!Us0JaK_=gFS1o4@9RqAkMrLPM^10e7|{7%3GOjF7GWvt}eBZ#F1qFH}6D$YRCsE zDV;OysTrr7e0JObXk$;$H4^17dZ=W7U>43_sc&7{jv25jsKiBIOI921jpGtP5r-$2G3xajVMpv5GcMc64nr8Wg)mUA9hUN^U1% z41zCB^0DWqpH)a!+mg3Nt|8WSMR_ujYDz{*_1b9l_MkxTS$7xHbFfHAqMmSYch|S% zU<1_;cg{{-bQYL*!sAHJ%Gc!YQ72pq9`QZcd)ItBp%n_-4SAsO6- zC8?rb@wJ(Nb&)fV$xxkq(*!bb>wEAMiJ&q!@vcDGX5vA1$DrJ(QLClO*Z0b}5p{CV zQMN}x)x8vOcH7ub?35}~7nK%FrTYhPuLoi?2bOGx9rVh1kA{qLuzy77DZPO%uC973 zS#z=NUuwB4s9rg$Yl+)Lh=kF?tV}BpT&el~s3ZEd^TC z0Mm!uG>NS*yXEDT)BRXt)Tuszib@h3(*`qZyft!Q&SF3)-Qb5uk!l!8C$Ar2feJHnES=JT_hc;P zo{z^day+ehNwa;ajMF%;tz@0YY3o#hy7J6bX$_y`u7F!AX=$Hb@=dWFbdM#Fy_UF_ z4;ezF+|Ctgp<6_omcHAQC)+-2Ni@~JTy2WG6)PAKXsfuZpxSeH$syWOtfH$f$5U^$ z>9vf7&QoC(Z*>v#pbRr}Oh(dYDEEr;*pf$At=f)7g83JDwmzq2{x_>I{wNA+?MvJ< z10@LEj1KfpM;(MJIZQ?*S*Qu<>^DiqOnd{-IHdi;g zOY_*gFty+s+t&=SrOGsTzH%P9=_QFY(m1%5sbg#hik_oXWi4_!9CH=XNV|g(h?TvU zXQhoe!3n2|Q=K@Ac0lOPZ0gMvkPECC$7JUNV32_`~HV&Vq9 zB&~jYFJ${aHpf-GX<9Xh*B8U86DpfHq$Ik5J&{OFJHK7Gc&K2eyIlKy2ts=Cy!b^=ev753DCI=} z>wSFcS-YUeM>!TaZP=YxQ@pJR=Wd_5$_VXAO-~iN?O?708;*wSe@z#7CFwwtS?h=f z8QVtNa8XuI+9$h7Ffmy-+6*|J?IG7h-?6EasQ(u2ax*c=)uv!+Hl#o_LGgy;Sq7SI z^ELE&mHZ(k)&1na?7(<#2-Uk_8O+T@-V1^X{@J1Vfr?C})W_@@U)A{!xW`WMD9O%M zJd+tw=v%VwQKEhJbcj2Lgoy^*^CIsqv+UNg!VWI?d=+jW+T?tF7Pj z-l6NU1kJ0LYA*Duy$(7$kSwb87qttJDHHDK@GI~cE{4_4hMWv|(pzEt0rK6H&o7tY zuiaxMHlHaOj&m7Tb{FJdipuQQa$O=Xxj%zh-zxM0fWki;Fy zxuTPAQ)j7)E!DAp<8&Y=aRyAEWrU7%hB0+hC%=3}axCcb5TD#AKEEU0 zuvNz0A)gvrXHJE@?!v}2s4gbhHASQFoUJ*!ByGOzT;72Bl*Uo@9k#HhqkV%`iOe~b zBI8k;NNjw8YNDt+wSvVI$32}b#Y2d%YqT&kYc;oc#A z^vQDlRXvWCp6r4KS&P^vgXGKtejy5KaNo-dsW)Cy7Yunn_~{}|0PXYJepA1!xZtQbi5lp=+7$|6`qs^REotn-qtp*ERS4isFQM6Zycu{}Xh10vTJEXm(Pw*Oa?Tz=U_8Be7 z;Y%`KQmxb$*o*hFdhKZXlj`Qot)*+#9L^0KB*uNPDUT(SPts(h+)GG+vp-e>lDnwIp zMzc|u-pz&EX?8%PPftOKYbrM^BCJXDwA|Gv5=dR*SAmLIFJA3xTFC^+<$VtRl5#vk zbhxPmmy}9%p7yG%e&X|s)erNkWstdJHxs*FZd%;bFg!xeVk0wt$y`ZYfG1rz>@i)? z`Q9VsCZglQ5Q8X-Fwr`NWNDAOn~BU$O7)2Qoa;=EaTWcT=SZ+nFuqWlmK$a+C|w}R zlOvjt*Q+2vHEKfL8@ch~@ig{cWUy0!j`(AVG>$Bmf^P*Yy&5+&d0&{?aWLn0C?~hG z^L3J(POJU&?$OHo<%yM!vd6mQ+|>8zF74L?i_egVSaUq9yHUw5+IiA+)OY<<%`W>J za=4-rEKh~~?yN$EdO|Ym=k~f!in~Kk4Y7UU8oK$Coi({elbDv( ztPztzf#A)*+?7`t)(+zuaW}ynAv;5J23isuLOgNN`A(IHHovVwYzNv?VV3Uglm?89nkn|m;^tCQ?xMan@< zh1RX9i5rUk8H**)yk^L#B zrZc@Xd^2Ts?~6{~Xl>iEw7aFFoi@7@sk(v2De-?4<_|zU&lPPk;1=b_1zPFBl3wwP z4^IWWqT&yJGA*-~=YH=~1#49Jo4HBSE7R~Sq)K~8E6Ct_iU)QlnB~IUtA}66r|aAAhi?x0*>Ss6cDHCSBBlGa`-gTMVPiu%)&fwR z+9;)>2`phjO?<+*g97H;`5ae~0z5!lH)VLTs>WXK^aq1FQKw$r{>a%aog4D)#bZRC zs@xtM`sY{owGAu7>k4C}`!yYeuAItpBZCe}L0d*YJ5j?=H8UkX{JGWz8{qV3QdiHE z($PJ8#Cpg-mi*zI=`@Fqv(E*}>8H)T@#o0#o8)w)U-72v*k0g@BYV6%ow}V1ENJ}W z^^^2)SgH9X;(ul_uryK+!#6h7TQUCn_1E{x*1dUvLg_IRoF?2dSD9 zrN`-?jnM^ybFfB%)Q)J*R{O)G$+=h1(wV=HjZq;fCUoRQY5ox+vTLzm2W`VSpMidb z+nt1jwuP;p2YYy0Hr6@Q#hrmIa%}DWiPuN3d&pfKmeN}l-1-v9{8Nh=jmWPRytq*& z@U`N62RE_YS?9-Rz>)QL_%z358|^C}7>G|YhLV3M#w2FfZJowG8t7N$j2%2eA+h~n zd2`kdZQz%WANgNf1phnXcp_8IiMNsc{Zp~L&DaktfJ6Q{ib*jJtn3prneOCMf&XkO z4iOtY$A4vXjH>?0Kfm3jW$yq?lyR5)d?rZq(a$&MZ%Kt3{<1(uX7Y~`!&ns&2T*iO zVJYDM^Tpp;2~Qo{Yw z>aTaKDg47ezkfPi2Ak`9`SAnEKiv4U6VSEwG5@er7jI9Bii$EJL^Ey@9t}uZK7TTB z;j4?t(}8~4G4tPa=%2vM-@FbyS@Sygyq*H>e{|Q%<|k|7>VY`(Q`A4Uaew#AbQ3_5 zoe4nR!t2UU5&nAYFa%V$PN_Kl7u95cQ~lDV*m0C8k|^ju=?UckBbhjjIQ(BDQ9YEL z`}tYZfAJ%fqvMMGz}pc}IF z(}1#`=GP~(ssanx4-?`I`10CwP#t#d805dYN%FueRby=Ye<{^vz+NgDrP}{u?>Qo% z)aUG60)8pl?*at5#3UhAhJ20YXQ^bA|Fab_qQHggudav?5HOy604(-)#!lE&;P<9~ z>riTf{8LKq((|VOVmcLGw(n0Nh<=xC{;7wHkNERtFVX+?D;DAp=D6#wgMs_sLw2^J z#z#$jsa#{7{5yO|fGv!G+k9r(WABRz4W`muuk_oTu@iL>c>Mb)EJ!Y`_I91m=4A-` ziyZ(o?t^~r!QRGYp~?{%71r@}jj0p$wR2?@KlNOO4|Tjfp-m->tbm zGhEY%-hP=N&)v>`-mb~Rzx4c&KR3Dg{7Ib{s;7Txj1+>*90SfUcjHjdXM*IdoH3!$ zyKTbojW-D<-#gJG=KAt~GHd9mRNwJ?JMlzpfB7H(XepGZk!fe5@BaLoCDgsgIdY$r zoPtE!gv|sU82J&-4=TMLQ~#!%&)G@xACSq>T#IK1?DFSRU{$K*v#VOrRQ`fbR_F6* zOYuqu;V1qLka<~V30=GL!2Ln>gs|@~&Gau~i%63hDB_TL_m{fWSY-5%AKZTy=YXuVOWZC+*^C^Yjs2%EcZR!}PEa8f7`omB4(tH5?m0&RaOHrf>$jmeP3+in8wj$Il zNMb#xPHl6Sv!5mXoo#PutSuXpW;x^n@hW^cYPb zvNJ~N>Ww2QSFPHZfeHWr(FZd~`)>zc7lZNty(c2F=V2tVgI5@tw_MurgNs!GJblHc zTF@S{t4L%0Rqz|*71LWeDJdxrf(9smBMR7c0)CJxk|KX;;AJN24;r~vL06exJIrZ1 zeib|><1X0CZ)##NPD6YAA4lYWC%y(?m(T7V9q1`I3np&-{n(Qrqd&f9FQvJ`#CNY3 zzS=4G`N7wCS5=`tJu^CS!941#q&ie9y=0Ms~U(K*jZZD8XR- z@Ut5ywS}LQ!rwCNq5#n3>Kp6BPERGp`$4jPX`FMz=}}NyFt<7ep$Cy(W^@Tia?Ogf z&CCd9Zdj)#!NI7M%wLQ@ku^C-%Jb8uCBaBghAs+1zlomTD>aOTadaExtBM`jMg=yU+fX)keGT{?)TyfPp1bC<8uU95s*U#zMk@k-bHi z0tc+1U7~y#T!1-JI4 zhH_0Li@`-@^k<)T==!C6mOQ!56jow?gbZ$R%J~q9EqjFQ_a^E_ifw?%S^oa`jgR0W zx0QR{yDROBt3t!}1*M=kptDJT5tL9+I2?m+&YCINcV@|x!EayP$w%4gIplmSGk{zP zd-~HYQ?Y_G9U#z!OAjwS;!Ow>#c^(c!j`~$q54IpoHqG}YrCUl$+<6K1E8#fhNKFl z+Cz?Ic!Oo_2qyCnxxj*VQ?C?mtFtFytS>cX)MA3!S zsXG?N8Bu)D ztqZGMYv2a(&OMO2e~(c$mZc0dQQMRlAMfD1G3u`BGc##z;IrqshSSFSft$zk%h&o0 zM!^;3Ox~on^6deXe2m^pw00cL+lueu#vtqW@~Ras1AUzNF!YjbYCbP7HGD(UkW}gss^{2e?Av&^~&S_VeHN0p=_i7@lq;T zqmU()J*1L7gzO=^F_!E**%^lHNs@gxB-zQ5vCEd-*oW-?fIUXJs#>Yq>jC7Xu1*0o4#WPtif^6( ze-850z`8xQwuu2FN`h27-h;7&0L5nkXe^sD2=pTq-h7r-C0z$L<;|@Cn5xd%*fYij zyz5D4fTvU;!$#eq9V^Q8z-pkDkp;B6VkP*-%N#Fe5Y?^?nq?y%qEB3wMKr`{=_kA_ zpN6kaalyx*)X2^r}Td-EY|M?eDVzZK;*GHEtjvlq$8dp=Yq!ts0d{P;^T37rcmhF zd##4Y|N%$#l^lZi3ZH(bWjsBU&3NGj~-b*hT+%|?2d=H&t%-AWL zQj{DGR4&Im_&j_c-Od{6BJojVPn#9E&R|16esuttW;ZNg=mY0l>72UWJY3CZYn$q4 zj?*OU<41wduffb> zCC|8l7r!L42O6l!V0})pJ_iXfE-?{dNY5T{GUFNkY|ge~nfoNb=&O&25*n=vkK}Pu z2AV5u0PHx$l$saGrTSU>RmTQDCEiBvLaIy~e08h*$lG#V$`5=?{o=r%&NEA6clT~Y-WQ%;PI?})g zDvJ~?9Kpoy11*+Y-N-rC6IAHAPIBYs?uzRmz7=Na-f9+)5^lHRu$>Lu7Z^q8kcX~IzS|)6WX;SpuuCFYoO{H@12V?%Hn^JD{w~a z&dT?IIb9xvY;G;pFe~@?jFPmv_k9_744iYGJ%pNu_4evZM~|kGH<=b|GF3JJt9ETH zrVf6S{T+%HVF-iM5O{cUd``B1yL1AOJLhX$G)Itux~g@N!V zod@kwjdcL0v`CHS6o;(eS=g0O=>eO~*WkbCA)V-0(cc;-H>{^(x;_i>eQ0Cg+$ZIv zPu+bWr?`U+-JB1EdN2NbBi4MQmT~`^@`Cy}ka`nX3T#fMvfK$iNQi2B+;08#5QG#* zwz*9^8s(ujTjG*M_$Lz|!<3jgK(M%sa8aS?7Q$&kdp+8YyH^0xgk4WZP6>qYr=O8~ zXd)Q`47z2*jcEeQ2MJVB{(N~<>!RHQHe5unu@{B$PYUSz3l!)SMZu3kqB;+Hplu4+ z82oLm$|ITg$#AC9?gP_d&jA5VNNrewLqBi7$b8FQGL@6lWXF?e5s*C%Be(Z_CtZ;? z^owVCBAFOih>H8&d<|RbfUA8iO-E$D+ObWxVKtR$<97_DvLJVVfPm(vXG5XdXo^e*EH9 zI|z9NtyR~ZWtg+@{4;RMa{WUyX?sF*H)vx>1nlE|a08s)ha^G1o z7d|FgoMDxCHkmO2Ui+)iUe?9;MPdZ@Aj!&)4TaSkG}>ZYKQ5(|^zs$!0=^*Op4^4u zN^4l5#*_VfAVb)mrvl>0u4Q+a#t;?|VzMQ9)yX?vd!&d&lkVlRTB4=tP%(>6Grekv zh4;RpEDw7s`^OD%X3j?g-g~HBBj9o(dL)(zBKln!ApvoPz9)fPQr_HQPh;D5gq%tN(S?oRF*wTaIW46s-6$coQlCre7#IFRM<|{Q)E&Zdu2M*wB-}&2FMBQVniCCr79w2oK!K3_U36B!f1fQU%B&{0^KInQ(beByzf^iCP@V6KMj64+B*3Z z$3UY0&A_E>QYF_3Ko&4m2hTwaT0!2H4EMfIRp(zjXm=d(8^Rx|8@pMrvQEPRBwPv& z>FN_PBpR+XtcvHdEEe>>s-ieAV*!Dh*j?)b@a{T%`q3DFfEpnu>&Xr{Gvo@I)j%!r zkz@nu91+P8*Jrw)XYOG`T(lRi9cVRm^YSUg@eYh~UZIunZG(M03zO`XDQXvQStVJX z73@O~o1-x=Gs`4~jny-xox58@)eb*QbjOz2K%H_ve~jh9cH{fA(gZeI+8z9#;E@jc zHH4xC&Xf9V4m%jiU>z@X%gSJhewZ>tjMm4V+L(ZW7kJo7Py08^Ff<|Ssr>OFmNe>8 zTdR)FBLnBjSyr(dzAaG|tIb2}O^0`?5T{&ECHJiL7OXsV2TP0%HDa z)eBl3q0|k1)n-zKOl>gO2Fj#&k3B2-N#&@;wX z>ySGO)ek(l8hh@acFDk8Lw&tknEkyPJUAry0XA+WK+$1YD{OUnu$ZB|ltCbO(>W|U zOK8zDA}#$)08#h1H8-i#Q&9dwPp<)HH-Gnuy>(By*K`0*J;|3 zm{mW8gcE_fS`oOtq`BBr*K)a%9tg#`Ds$r&d6X&Y_eq0OX2J9ZtD<{G2Jy@7zgQBl z$!{73R!k!8JC!#HYxyG^R%ZpoJWmE)a~3DQmeCFshIFPZ(EQxa(}@eQKQhgriTPxF zE~&jL`GXVp9<-tTu%s=@G`LQim1`X>rQ6gJ*#uosco|FkKCWz8t*S(~ua|p0{Pbw; zQv+#|mlWt76w%U32?oG0#+JYO5f2g(VuBx9KNe?tT>_=HtaP$E;2RPocY2~He3zqRS@oWNrEgYqt`W|t=n(AjKUOJNKr06^o!n#H1QZFr-( zxtcM)Uj869^FDK%yyE3j^G<}W)o8TdFF|Vo=iW^YYrUFl(ZrPFd;V8Fil#P4;<^2yeCs`if9`RBYjgtj z2k4fRVeRS2=N80jA);1CxT3N2ZB8FPng?Hx9sBh;EhH`yJf>MS_3pdb>Z5`PeN9th zc_2#^DVD10L+<^6nC6$UDS;IA_9mG_^d}`zq34&3fbgk}38a1%A_qu$0ZKO__uH1AGb-yf=17mk7^w|Rz=$kz<@N1Rjm z!AZSw=mztvqr!}olVu2mAN>weSR7k5DVFO~FsTj1|BWZ})m6HGEQcu+&Re2q>{ZqU zA)b5sKu=~lFZyPy_+M8qzE{Yz)t3jla;?fx$|q@@@fCMrdX^1BQJDdC0;yhdpbWu; zxcuj3>o``|74MB=5=bKC%0{=kV_ z*K4tp<%0E`%##bGxGDK(9uhY9awgUvq7xQ0iwPduP^+oxMlO7%?rdy4l$XCxKtW>x z`xp`^DyV_v3!!caV0HTBJs%-M`2~>Ez=!v-Spv;z1=#Qiy<9!GN_;4EFN3&g*!z9%DAc0Jh65@s643{E+t4x2YW^XfN z8~80;1)?8m`^oVDq(?^x;GbzMf1WDiCp|7R`Geo`G!v%K52iw=QVur@;bDfyW3C6V2)Q^*5;Dq7DWex%jl2 z(Bl?wqL`qMQEYi)E!{NoE<{hk-#Q-Z)8x`#b%@CRa;(GRPvA%{Z~QZnK)o^OF|bUT z>2u!^%EP^uUk$bgcq7Q-%N}(+K(9=~J;9PKb9X}pORuoA1hllaqGHXyBSKvswoIQf zj-!Z5HIs@u=S3+p`U?XKGd7~;IfsjT;X551S7A_xpw+TGx{?_t?x;jFEXH^T$kP*ypNxbk-r?!9^u(8Z4W` z=Y!WOv*aJk7dq9_ULNN4RR@~mI3&5OmQY$ZMl)LYIQF})q(Vl&Y3nJ8b5{*`h>nGh z=wW>EIQEImZ^9Lfw%_)Z+k(rkRGguhCe4lSQ6VjQ00%TznGn%=`FGn?#)fp zVtNkyoB-}bAsDD=lVUbCR6H5t7LRcWx@~ri$5H7~!)1rE_rtuxY4BdhNxUDH(z-FA z(q#|x*`82)!(qd2vz#X$7r&?_Zs%9GCmadUukpJVvvrXrCtIrX1VTc8ma(OjW0w1x zCVL-&)P&gC||7&oF~()n`SUbj3D(x-Eac(o>$e1ibwHGFR+4-@Alm zb>B3+>8Uz(-l+2SjyKgfPRIw~J7@u*G)rKD3-6_3D!!(!+R4=+kB07$P}rCIV%2#) zeP%(5NiJGEhNx6*ir!MN=u$*;>Ba*w{2_|ct|tl=b%{gT;s{^8!*30zd03a7CZ`lC zcrrYd!1S9}O-$ylBwosf6nCQF>ErurxeJr|dl1?&qtd0H81ZMQ!t1N}7H((hwbB5qMN<)(Dly)H%{lL3 zXFaNJmco5k#amiDCT9hbXl$uIB5Tvq%t1)dwo6KFHf{Nsn5S9Is}-Qw63ZA}EFY>6 zj&s)k!af4D+QAn{Jjqb6)z5zfn$_0Pze~a+gz{GHJ^tdUhW)VNVvkQZnFpByP*gq2 z^Cl|03Q71{JmsFDhexhp!P$3=xq7- zb&}fzTyfE_x@UqOisgmQ9o^(cRVzBIiwwPU4eKvjpn2fUd+!=_=*9Fumh6Hrj^a@| zHEiYe=`32bodT1M66WEJBzg30@Rz>(o@*CV(@gbiVkSgFy7-5r)o z5rTTR8Iw&iF|~>#_3;XXtlMAHXLACH3Dv8ZUP)47iNs8vi#HQm;hr~oM6+ctNA#w9D);~#joG^qnzLoiI|A7onoui0 z&l=^=HL0cq0S=!YEprt%wI;e(58uE=zNq@S`Gg)JM*);?mb=Wyk_ZwT^KZ!r+)r#Omyq-mEs@ zFblIo4nl~-444%-aSzg)AOCZ=8cO!5!KG;<^CwfLFy_yWvos=wJn;)><=u0G}0VVO8m@9eszQkK@vhGyP0}tok?$4!_%} zKV(2oYAV7^_*GRL8vYrUh zYm)D&ZIVQ^5c|sCKgWqX%SrUQPPyHhg|P$#`8^9w*bIQ&S-+E-%JvL*GW%Qg0LWhQb4KASi8gaU?J+{{ zDWa$&h7N2}a+dX?iNw8&0d*30jsT!eF6*aEeFS+HE;5Yf@h{BTSkzwV701~u`@xDF zLBeyXR+ZrA8Nyc_BMS*0)*bD1K9UP%c~(pyC{6!9ncxf+vv=>$p`bk#2h5hOZeX6G zdjS6GG?h{2pHVJeQ-6_`K=1$ldb9W+ANz{p&&zt=Taj%pti4^%dD9Ptp@5+! z38Ft_YC-9nkEzPX0obgXuOU+1vyXF^7$f$U47}|Vd13CZL=2+OkOg44N($G~)xW*8 zGYFH+UF+a)ohfYiXCTiQQuOc_IyFMMPV8iV?0A2m zXoK5l0^+XFRea=Pt-1UcMhA2dLHdtU10%k=chThXKw_-jM3n|j@b3n?;LFDd zpzV_M$ljmFubr1XC-AD0SBxb864yUC$6p_ww|+Bhay0(%SUTxe=V>r#yhXn z=SJbZ@q9UtfFa^sQt!O1d+(eHcuwfm_1_41@C8t%*{V^-G5}bs@BF zuj)?pmEZgz;TnM9qu{&$ce>`>(w~{3+G_y1Q6K5w|L?{8`*ZG6_)cdiKNc1edcypi z={Lf74)osu1c5=mCI8JZX=Z>R3U1%~0|0++et$jw{~6#Kl$Vj|-=F_i4hm4KQ~+~> zD!R!0*NFf8>5or(-VH3cm9*?{#6)Hx@(&;z7x@bBcQd`q^EY7l3G4G0zxx?5pT^z^ z-G@tLhdMrw+5QD}J*S5yA@l_IKLP_ewkzxxp2ykG&$NGSJ((Q_!&^TVZ`ZKzf8 zh<|uaf1|$s&?TT{4SiD(ac9`$pVV9rul#P93wYoEF(a{0-<`XD`~R4ccwoK%@9zQX zu$L@1D4X`viE=Ul@?sUair4;8~=^5 zdqst}znn)XP5wJ;YE1yBna;^P$$#%I-zu^nG6s5&BCq{snmP)A6&l`Qb^DE&1_Pf1 zFz9FixV;*AH{`t9{7c;3tY?ic%$5G-H=WbwY+(SIK1|O}@Eh7d+QFF>I_PS@@ta-l z0-*S{+`cef`^`KTDV{G|i#j=;_w~-H@$(6Q6f*RGzF#Palpz%W7lU`5SpMZ@o}YA@ z-DM%^57ZH;<>hR!AJgUk{u%&%2zyRlmDIUFXJoKD6UF!&;jf+@0gwnL`rin@?9&BG zC|7{;@Ncvyn+mWY1ypkVztavvVAkKsL_xpX`TCdtn6;YGM3qaPR^pf6I2yow5`ZsJ zyrSg#n=i4r4D2@PSImmPnaR_He_WBMQfA@b{OoyJ>Ob-|PyBKof&MR11K%TI5ak>7 z53}ipO4ATy~a0)98fAYee!=`u>YDq z5aj_(qhOxO^BQt)Tco9*DRsKL9Nlk}y89j(Ck|+Z0E9Nd{J$OL-eu~lF|vH7>*qf0 z+@tRza1s?&*0dA<<}Jkc-iFr&y=GSVjnJRQ0c-nzQhzRbp?NQJ{5R!i3D`Cplh9LR zYP5vd=KR2$k3Z8%cen;(AKWgJU|D>g-N|9$c> zouZ$?<&~{w@RuA=1+|Wu!A`pVXL@&yv;9Ae>7!K&>J+YnNG+<)I;M!lQ|aGX#n(6Q z-i3L&5ks7B3Pj;j8mp`e-y!O7GxyM?Jf#eN+ z!c!>)+?hXF8jRLn|LM&5_Pzfx&0Xh6rRQy|xKtxs+LKj`U#R$ZG;PVXI@~LQo6-MG};El2UT6WVi zYn{(wKvCFbasNe^^j*N|UvMNT=B9ma^dGL>Bglxhf zX(mUE!xqYa)xe_!sDkTH?<^M9oseML%?+B9Itz>HI>eG$`elQz-tqn=vRf1vnZ$wX z=B&A8n0qL${kwDNQ7-w`!`^X%ERwGIB;`5wtVAn$c>j(9&`%?N=osimnh;Qj8P;j% zTI0eK+oSZtiXBDM3ZZ5A$MSh9F-X0ZFly08J;#Oa4U~Od-ZD9-z?80?KSt9<>~tru zdcE-K#FBqKQEX76dd6XNRIn}3D8*IEvgK;Kmci*IHwSWn4RscP?rKL-{KxsFm;3{~ z={0Rvu`rp7Fxr-)e3MsLmQQP)|9ID-^coZ(Xhn>fV{OMb^_iY6`Q9x{}6Gsk(ZSA9=1+L4>c)TcW_@7_Bw&f4>vw-dJ8s5{v6blV6-&cn4z zOID<H^y-i^C`|6$dsq1VPwd!sf+mke@n0ZYq*rAeLOZFc8RwGY$?Xr#+_`04AINMco@pHOSAEIQ_n!>qAckK9! zSm4I{o+FQdRv|^zr=ELL-d7U1$Fbhy2fgWH0if4r@!mRACuaMbj=uPd4#r`E{g=z> z5y4Nw5-(4lP8$OdCWb1+6;cQPV_0m{aqXCKV$MXFckDeb&mO)~a5mCQ;}QU|78?gR zIO-nH#C9X=W?u@-T#jjFcbo@uPqW^~82Hg-NNq@k+3ODSIvkERj#g!#*D~3mb(=d) zu7n9$A}|HzA3O$FDF;WaNj9qd08MVmrxeduhu~-)Rz3B3sjweCfA|7n!G+COr5O^$ zkPL~k0?^@L&+P@I7ZjIyc(ltszGUFFQiofm<*)RagrK)vtip4~%e*V+XG1IGpp4~_ zTkCF9)rOOTE*XvPC)WE+QR)q>>5YMomJx`{%JwwCoB|P;?MU@^O%-aQ>ejggLgLy38J|Zhj zbwSksy6l3e#r;aE>*5A*|Fm>o;N$56&|psjkeeTmR(rYeH5DQcU+WL87Bo98!YF?C zc=PP?udugfuZ|CvPJ4a|?Tr{a*(2ZhDhV$=F}QlFDtZ0k%f<+eWmIj?1G{wmMOQ6- z&+5aiIfPJ*ajWfN#Y$GvPrWzo81Lb6d!hAke)P^t{^o$^?21pd49uNx^472x$l*48 zO*OP4U-JV1=u02-L97dBb_V^tVF3o3OX?R^tg^TvMMxo00}&FE>^BDvN6q#|jb-4? zvxG51AE0E}v==oJmq=?GMfRF`Zer=9NBcY+4-0*1d;GsWtC!$MTQ2+rOBj%q-2rogTLMMVyMKPy(D;>;ndP{{h zi;I3uLxN&+gBku8biQSD`=BQlE?|4A8Riu{eznU~v`}UAv|lpJG{aj;_NlC1iLHK; z#RIV4a7wEtc71_V&I;V$v%xkI`sw#Ta(*&*cz%fB_D?k&Ei_t_oxObEU8aBk3o^Ew!(y6bTq8k7sjNRiUmoQQrDup~v6S0;v zDhsRrSp^mfd2!vksImm*_G3dYNQwi76yB(sN^v#Als>&)IN89{{irsnCDaber_b*t zfVh4fde0!RymtU`B+NY$t6*I$Md|Db^!rM({JGLWuY*0t#XC%dx$Q&tHvGa9GM^-R ze7!wxl~*`D4E7ufdiN!B$Bg0fs$AOX4c5x6)DtaPRR#^aibX#NigH+hj)78$0r4?h=@bxCG)3Re5|K|ml z2XEJ|y{Gk(+;+tx4HyfmA1G?YvaPmp*7O31JD@gSB!RVA7IbeJ6$^F^nJ@fYkGhA> z4DpKclqoV#as8myRB5PZv+`FhfIR$wx}*7P7hw&Q zIZG~*ZnBwesk1HrHL@Zpo@p3hPpIcG6t?jTW#2hSse09Iju`1MW?LH)C1u0oCw+}r z0GbvRXdl}<0mjjL_1>}DmhvqLANNLu9bHYaoM_P+ziHOny(tUoo4?!1S^2FR zaY*m=uw`@ly|?T1LY&^X2zvRnG7AQM%pACr^ikBgXy>ZKi-~K_M6`UINF_D;DF^JO z4d+vrlK7^!oUGN2#jPF=Q{qhScLw`2&$fFd7#T|sL%9Wpx&u>7Z*8W&^xe#mM zhp7KnnxRS@oM5(^)2Kf0bAr*LzP=L%>wmWHt=WXjX54c-)pl)=y)E7L z(+@SDcGYU8b1TlHCZX@|?pW?CX%St6>TTz`6g)wKmj_1Ob|rD)!c_*K^m+{m*!X4H zcWThvS8GvOJ1##5>-2}#93|^;zo3i3^vByvZA!LYUPbszE?KG06|`>24ge~iKD~${ zvV0T>*xlJ5K=o0;+c(H>bJx9oJMiwUqha&A8yovk2v<^3^o!MWh^u*`1B4%y&jZoA zTwl#ycho_=y}nl#p5bWwWNSRi+EMtE&b#KHW1BUI6py_YB|KA|PaF}WUZBCE{mtGv z2DLH!_ntrMsw*(VATF+iulB-Nzs`v;{_rxq`khD~5o|)DKFO0cnzJOATZ)ctA6yFN za@30gjhkvstv+QEzHNg?tXP;X$0r|{8K*r`P`*>LQOpW+3Kzq8Wl17+p!iv%e!MHe zET`FguluyPihqS~ZgH>b25(*{ldM?(csPFB++Z+=t)zGC8#d9-b(2Ao_}HZPQB~-} zTE6|uA=sP-$C-nyFMRuRbK1erc`wh0+AmEU3Lb=)eS1@MFi|LMzrHBHEtqldK7&U+ z0r?dJ4~!TkGbb~VzGq9N_q%ly{INL(psbdR9YRxsvfw@Hpu$ms>XftLeRiX7}{%Vm3!qs)TR;RoLDrawsSiX1JgP0U3Q zULFbq+m!pF<_e&ZqE|69FP8QOc@WjURQf}5=rNn9NjrE7d?gy0cF2&^HnnnzR7~Yj zv)0CQ_0~ATRc-Fd{l*0nW1s83Dss!#i@S+8af4StKD9$?*TToqc~leg$jt(`Nhj{w zBWYg*h(6PBt9rfv;NW(GAK@%gr8RZfGQR$DM>n4yK#%Jp*MF3hqjm^J6iTn_Iv%*B z2xZdv`E2=mHjfUv=t;z1E;iBju4JCb&EwoO|FO36bmtz)PV3R!#wcc3ntDNNoZ$H;qv-=)i2edNk<0|R(+W1(_;K*ISrf4VRCrGU+FZR9ik}FLAiG`~{_l{@Fcld$#`cnIZsn1+S5$ESB zhF(4iSaTG;n{f6Icra(G>zFAR-gm`X!+93*?9fjb-4-`hHWT zxENvvwy)O`zvMDjfUBS{AIrC?!ufgm!!Ji)pbQOIy}(d*Y9}?v8dxVqssAHIaC-T3 zYpXDN;b=w%MkMMLY0$?%`NkHG+z@UKcGE#TIJ3_Ko($yXsjg*F8g^PFz@|S~bqOm0 zMkpvBX>q?lY0f`C9iiyqq~6F=xz4ZeDZW_6!Y;H?GpA{%z%4{hBlB9F9G7@d z!xC6`tET0oSmuuQc3>oI21+W>Pr5=A8O~U|QB$hSCOCLHEPMsOv%-t1{xfN;%zhtU z%)8lK*u&ach}#e^yjkutL)?xFXmjhQ&!ns8nv=FTgCqml;1wO@;dma?v%?~)2}7Aw z-PaM>RjWTyS6s=Ta>x~>wgQ>IsKsm;rG&w8p+lbeM2dZ?;P_8e(S|$Kc{*XCwzS`^Elq(GeM)t?ZoGDlyA2!o`UA+D>gqWl^e3cydA{#5@R)g z@d5C(jQ$Z@!(lxT&>A&Y`LoPa3f7Im8*O=F!+a(A&02#7;<7U$EqJ2+Qcq`AM$CY+ zNQW?^!ME46Vs}3U{%D1HEtdbX`|^eprnQvf;?+W7&4#e9;Z7ptt`maQ=Bsa3t-t?l zId~ti-kXqnwWl+zf$41JiV{_HTP*dj$Go|KK+EzzEZG*e!gcV}Ur&n^SkvR{*<@j%z@>D+|hf6aaXFx1PY9{Sd|aM7DsNuM{KkQ*;QR|XP8ie~mEtXU61-=f(n z^roPMoR-WR^w8#uw-9e_3GR5#Cg4l@FxO3ZbS@}S)?%*H1XXvF9NsMRnHPFdNc40k zD=}>}fK+s?8IPlFqE@`|EA)MMNjA%Ie(Qa-DKkIhr{r?plnX-WlC7?vycfDXrSUAx z$I0#-Ompw{4aEt+nW{@yblYCwhrrDYf}#B`xcvH{B=e2b4HB`zy#?vyE$Tg_^elUZ#WA%o|n}#^ggSZG-f>FB8+4(#0h7WYN z1KXWVMuw9P%o~|pdc~ctY<`evAH81ZcIrn_capoCVwR&!SU`s38?%CY)iMz#0Efl1 znui7X+vW3DZxRcN9_&lbNj}gAkloZ86C^K|54k(6U`XJ-9iUhjDg#&B6Uf6sYf-no zmDWX{R*sUom|KPTiiIwig{6uR*2G>ujheyUk?!(ewa){hq&{;}pl+S{=Z_*A`_-=Q z-`^Z&?H+nhuV&?e`3}GAChq#-h-Aujj(M+?Ss|b<_Vs2-!hQ76W`8ZF=juifc%y*5 zK^~x-SEPsVKV9hw$exPCtkJ6$7slbkan%vin@O+e9~f%HWMx zP8r0VN@2{l(ig=i4Sy7X9Z;@+!_(EkstcOaq*wYfR~#n z&BQCM8Zv2I0d-&e*Dy#hV^^})M9zn2I^Ml|_w(K^8MwDV z4;GL!h6!D6&mcWQrAgg{l$rUkj?BE{9S-#9H23)HqMts8>sW8I>6{uzQMEVP$!JM+ zIf!Lzo6NwW_nrjQh2A>9*w2SqP-yrvv!%Gf)ss06yaN~9#9>rY)1k!Ls8j5F7He4r zL^=CuoW8e6mko=Gb(N*(XWY#iwMU%B1J_n^N6o9K>P-}>?xI=ZIGQskz)uyQ-D&)3<2V|DmCT$yRbU_ zhe!jc_`ZDf6m){^EbkgE{VHIL?1(94u#m<{Szw zNJayc)IqLru_R<@k)isb$W3vmYi3{So*&aWC?=br9bE+|$w(EKn*1=gyTp?G{W zjVcVO#XlUJd~k0i>-(q#til`Eq-UuwVwaqwS7s@g?=cAL+JHJL14#G!T=13-fQt*6 zn1Jh9itPeib-wX3d*9Gx+|@q;P7RZ*o(9LKqru=hz)+Vr;M?Tedk^a)AZrRkEeDwlP)9g9AOu zyKSif?C#Be_@p-i00Y0mCT)@~(-&Z~abiQ!tm|Gt>BSOK7xX+8D3@_=|fgr48(la=ACqx(y%Q+ zC4+TH51+!*4I!s+WgELtT)NPg z)wJ~bW76@!(I0s%THt_KLg-FXF)B6qX0lW)m6xTX2P;FH0w|QG`LHA%yfr_BYIBnd>ozpA zKy5eqNrcQ?x%bv9ju-9v9t4YstHbbG zIk-av=Em|MxM!izjjpI4^X2>U%rVv_uTZ!4b_wSth8>_`D|*y@;xn=~RRX5pYxSkG z3gLG&KvywUxL5iblyl~Jck^KB(whoB?bWY$-^4NbwW-Q^4@XjPyvw1vs=!rg5uYzx zN1I2y`nv7?9Okr!BH%=z?!~U+5j00BuIs3%0>^^&E26!Ho_P(cb^So9tcP@hblPI8 z4)3^k`2-#@VyJmVP28TlWQRC0H2TSqk5dw@Lu+2JjJg4U)ZIzI; zjU5`@alQTQ50V?|E%oUOHzz^j*W)FD?UNADK z2cJ3}n0E9;=gM{3RV@^LY8EgKU*D+RUHx_fq+%-wA69h$&0RwAPmH;^6)$|BBT3R) z$WuWK*G|TC(7TCEKQ+{O(w5S6r55Q}i`3(CCQ4#P%TasoM`VqUZPpp|DyiyK&5Fel zuYVc!3f91^_qC>^a_{MTuDu$Jc?qOuAOuh=iu}?BzJuMN4oUw)EJMssu94yP#O}}@ z`1l(Y#T3tOyF6@ey{W{fBC&27U@sH6&*u&LO5m1x-WkF+t06!ob}*5{ zDq^Go$7%J*`xhT%?m#;x)>yHCu&`lv!F=2g|8R`t<*9EL8(-#dach$A zngZjF;CEEN07r4#1Z1v-dFP*Lqnx!0XIJ?APamam~o{2Ihw!Z-*3 zd~-%>%=(?JQX493L{0(FF^{+L@V@Qhq3Tk0pHi-Y9i}mwNTAP%nc%wuPJ)o)&sPs+x5glOVL$;Oo7J*Z%6T$v zZX!bRB(nsMpl|Ddj=;Nf6r7q1uOD7GmGC}H!K#IqhUI2oP4=n)zw!03RqM+PdQG<; z>}(68y;?c zs_$I*Vl8U9=$=U~?E`|}glu@4Xo3c}PkN;Rn5fWh57GY$MWi< zik9U4C$*N69rEGviIr+M4z(rq7SU7|h&vU8ug^(b~;OtHTeW18GI-W?iWT9z}!=B(?Xw8>vY&UGC zJy~N?WA~xc%pi3c0i#=$F;HD{A%9a(7c}&UcW3y`XAXx<~!F@ z@0d1FLFhU1GKf8armI%^@)qh>IZ2>=I>_~6R5`I{&?*-iy3@X7*SWse1@q&)eW&vD z>mc{eLO|Wq2xacQsPN6HcJjM0Ln;Hypx&&Y%^NbLY;X3tY;t*k8!aINd#?qP^*Ex{ zH5lqRDVElcMPX6_ZOGWiHn=MU+!;7qQLkL;dO@MQoQk0oyS@-0O7FI1$a-@yft(VZ zk5X>BR=3N*Jc-q;U$tmXM+BiNMBJuCCkHK$w^>siWFQ9l4k`I1c@4Qj;!SS6&Qg^5 z4xdc@Sv=lPx#h-{k2y>o8J470%*A%9!h(;)y`?bo(vzx6nt|8lcNbCIz)hXC?7YwE zDm$Im)=aA%cvE1?ukIabRcS3yM<|aN6s`TreCNYO89`9w_xok4%TY1wJ=Iu33Z{`t zYqsbhuI{HzXv2|1>=daBP@DZei`Dfq#QvhSUqF=s#nc@Y9ABNz zso_(Kkop{i<2&eOJKDi9EQXre9Ok6~b!U+z0kot_Q@B$?haSe#p(X6_F>@;4bTbUj zy|4Y%_4_YmHwgr>?m6AJF@%&Jc6#6+G-K^vBTYz*ksPbvvK<}4>9j7VIG>ENy6)uZ zaFN7{<4!orL2AAmJ>Bmmx@c*EZ3d43H>pUk#4g^IVDozd7+3uk>!LDoZoB zTb~5Gt)51gd{nPC@5YpO5Sq2ZY2dQ;x>1<%W_V$$|4!`Twu#h z1)|fj*U1lDv3M2Ztd`=uBG(|7GD&xb7Os#ZZ+e zuWum4X)#=QOH2EwH=h@Ky;kBjzumm$*Sc;TnuH}!^8)ln@1ug!o=SoJ&f;~NR5rrq zrzm0GhnU9F4rOohkAgcF#4ahB!|Z4h-8S&GZmPH8bRzb6nb^_n_Av&XVYQ&zpzUm) z0_g;^C!&3XVM2(qw4Z^T|BtS(jB0ZUw>~WtDGtT0K#&%P;_jqaDNvwTad($MDZ$;{ z-L<&82dB70in}Dpmvip@dB0y-S!-72&Aj`0=8-+K53e=!C{0`==-WSUPGhY1{#zQw zzGJ^N+CsENUCpzcfxb=s`AD~G^Oc+A>a~IXL1;%~Q>C5Gc=aH0P&?k6i(@w=BSDG@}7Hs zpeXuny4`PUiF{c~4<270lW(+5S?;da^WuxiOU0HPZlRhrI*_|T z@(Rkw3X9=rGVzy-K2KB_4UeT%(5#?;QchOi@5K#<7oYOl;s*C6%kuV>e}uldb{$6j z=~W-Xxs-Yv4$_$CZVt^hK3OZE@zRd1pu9#`Ya-rgL5T9!RaXTm;v>87X6C zrw;O+A0sZDVI%(j;hLVcXjgEjCg9HP@VZ|@>K{`P_H4v$4F;nd)(9B}0ktWSJRGF- zdz^1%>s4+)*A4J%vM(sxxgnkW8>I^ug`$#HewXX>yxQdD#^uq@qY9bl#6D|Z$wp!|KkXEshQSt3AuTaE0M;9*lH8+{*+(LSlMs%S)B$cx; z{^8%hL_>Il0CMcWFEM)--~Ggma)Ls_n%;oEtUEWI9Gh#EVNV6yy$SVgTIXb{ILdyM zTY-OZEfvLQ=#zO~D~a|cav7gopE88FG(!8(+&EL>rQY|O$7V&c zv@wP<-*l!#W??byyl5dOy4P!H$k5I{r>^ql3+LTxeXzOONd+IMO~qCQ{l~}`gj9pK za=hulDc#(HD!HUA#Vu8AVO~(4f%BT}8_5#bk40TaWnj4+)}1dRB)A-ykv4=M*BX1g z9Pq&iTRH_zyFK4XdMtP3dAXFI++9j(is4M(Tzo#w_@-~!qD<{DA0@PReTAW`G-9Q< za5Rtd8wjEFP*UoIl}*$$Q?PINcpul9u5>cCzV7=z`sZu7D7q?hMV)HTVjeTQ2=j|m z*Ml=t*CZ<{|I1gnV!NA zb+_D_VQznOtHHPDUYc8sBV8sn^Gopl5UTTq?w;0Qv7biU{9QeM$POSg`|c`fX0KCs z=t7}#QHuY|j((@*_GI>giU-|1)as<=@+%^?RS`TYK5r>Os@i2Dl7Z&1PGjYMu&b(@id z)XLEZgj_qN3Rf;ojMv6rI`i)_FRN6z`$Q0@#q-3+gJvsUP5NJ6OT0b0gbat9(b!Reme;LZ{49 zlE3)fxbS@rU@XC=4~mqs+&}XE#iveI0cB0o9d5W|d87YWQHo9Ga=??xl0uG1Y4Zw(5dQTx_JyMRJDOCw^2dY!*n@DiZ5UJ zTKt9?j^yBwA^Im#vmqh;3HY!$QGtnhNzNB<%QL5moXXUOS;;!(*kSi|ZN_(dABDJ4V5RSu#unH{V zp!qePYJr0gfvPHPKxkgb>(_6YXjNr!6Eb8%KfVWw<4WLi`lr+zO$z*ox<5ngUjSb?4KDAmiz044!oWTmnIf4tL^7~kOGak_(;=ph6Csb4Y1IbW&h5~6Ww%)!q2 z8zkQ;rsX`)^Cp094>jvSUn&yk!+_VEE2H*1l3!cC#R&(2d|IgBA--Yt3waknc|VJ- zWA<%C+yJE@8oS4)S#AE?Lb^S?6e8Mnh5aDQ$fC*Q2&D|>!_?=@ogNYDc<_u3rYe9P zlWHEkGrjGzeV^4EMYFB|-r^#NuzkNIOFRsgoB@3n;E<4}%2xx8JzCdeuiEq^ygc?` zwuzf92;PQdc>6KuvSy40$1PDpkmN{e>AK#8%AUuKnbAxqSK6f6x^$nlpTII?NWtR6 z4y*;7!=Huq?g*;U@Mi#ce3plA$JB|YiGyN`(ZezOK9GjQ{uQ3w4(XJ5VsBj3)b(td zyqhxAn*p!tPaqL< zo2ayb%z8D=^w8OcM1gc2DVPOPwW#m6!r=9mr((N(s00URM*k^DPQ#oIEl)D>p2mm$ zva?%9I9cMG&u<^kDx<gn`gAO_BMLywSbab~Q>4y6=)4XJ#lOfA^xq(qyn))7R{QPX7A9sV1m|U;| zTGiP@xI1~)CD5%+o<5iGfaT=uY?P7p!XZH1Eh!wch@yZtdpeJ?P|4m+E&%@kGelWxq5Ub ze-mt=Y2u@rjgNMXu!_DGct?<&K69sm)C?7e+*(N9ZX*}Tn+z-rx-yulP)VD=yxZz& zK7JBgjUvidVlo9epq(Lt}v=U!kOB{aONi=F+~&S4hSgy7egNKhO=klD7?c8Tm;}sR!{t6DK;zhb&Cy$PFba_1r#po_*RfU> z>6RF$MMCLZ5HbiaXni@9B5m%N={ko(C!!M=wVy95utUQ>Nxw$jp$hDFB67pjjxG+% z#>3Ie<;Src&65j=N~>=^$7`x&8H<53D^Na*#u(wY;u^P9)P;yH4|s#egZRevn9|Dq zbjMnj$K0|cyyY8RdsQ$H6d`SCYNV#r`fuPFEGh@bkC%TKw^P1ILYOCe;ixoMp*!Dj z`5fUjYzRhFU}kRiT*-()EGmA0pY-J{ZcU7wFMhQo9>~z(!%0DQ=BfolJb4y_I>Hd} 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 NXsGI_RKOmE{Rg7TslEUJ literal 0 HcmV?d00001 diff --git a/main/guides/integration/chain-integration.md b/main/guides/integration/chain-integration.md new file mode 100644 index 000000000..ce53bb3f2 --- /dev/null +++ b/main/guides/integration/chain-integration.md @@ -0,0 +1,50 @@ +# Integrating with Agoric Network + +The Agoric network builds a blockchain for smart contracts in JavaScript using the `cosmos-sdk`. Cosmos-sdk is software that provides the widely-used Tendermint/CosmosBFT consensus and best-in-class support for chain operations like staking and governance. For simplicity of chain integration, the Agoric Network works identically to the Cosmos Hub, except using different parameters (e.g., `ubld` instead of `uatom`). + + +## TL;DR for Cosmos-experienced + +This section points at relevant reference documentation for the underlying `cosmos-sdk` and CometBFT/Tendermint consensus engine, and summarizes the differences. + +The Agoric Network currently uses `cosmos-sdk` v0.45. The general Cosmos documentation for this version can be [found here](https://docs.cosmos.network/v0.45/), including structure and`golang` documentation, and REST API documentation. + +Use the [v0.45.1 version of the REST API](https://v1.cosmos.network/rpc/v0.45.1) for accessing the chain. To use the "Try it out" functionality, change the Base URL to `agoric-api.polkachu.com`: + + +| ![Alt name of image](./assets/cosmos-api.png) | +|-| + +The chain can also be accessed via JavaScript using the [`cosmjs` library](https://github.com/cosmos/cosmjs) (and [associated tutorials](https://tutorials.cosmos.network/tutorials/7-cosmjs/1-cosmjs-intro.html)), or using [CosmosKit](https://cosmoskit.com/). + +## Chain resources + +- The base network entry points for the Agoric chain are specified in the [network config](https://main.agoric.net/network-config). +- Additional chain information, including tokens and their logos, gas fee information for wallets, additional entry points, and explorers is maintained in the Cosmos [Chain Registry](https://github.com/cosmos/chain-registry/tree/master/agoric). +- The source code for the Agoric Network runtime and contracts is in [the Agoric open source repository](https://github.com/Agoric/agoric-sdk) on GitHub. +- The base unit for staking is `ubld` (corresponding to `uatom` for Cosmos Hub) +- The command utility of the agoric chain is `agd` (corresponding to [`simd` for the Cosmos Hub](https://docs.cosmos.network/v0.45/run-node/interact-node.html)). +--- +# Tools +## Building `agd` + +The `agd` command line tool can be built as described in the Agoric [getting-started documentation](https://docs.agoric.com/guides/getting-started). The "Build the Cosmic Swingset Package" step generates `agd`. To confirm that `agd` is in you `$PATH`, execute +``` +agd version --long +``` + +# FAQ + +- How are transactions encoded? +https://docs.cosmos.network/v0.45/core/encoding.html +- What data is needed to create a transaction (last block hash, nonce, sender public key, etc.)? +https://docs.cosmos.network/v0.45/core/transactions.html#transaction-generation +- What data is signed and how is that data obtained (for example truncated SHA256 of transaction data)? +https://docs.cosmos.network/v0.45/core/transactions.html#transaction-generation +- Do transactions expire? +Transaction do not expire unless you specify --timeout-height: https://docs.cosmos.network/v0.45/core/transactions.html#transaction-generation +However they do have a sequence number and may be invalidated if another transaction with the same sequence number is processed by the chain +- How are addresses generated? +https://docs.cosmos.network/v0.45/basics/accounts.html +- How is the blockchain queried? +JSON-RPC, gRPC, REST https://docs.cosmos.network/v0.45/run-node/interact-node.html \ No newline at end of file From 3b329e12dbd02f2cb654bfffeb6e8f606bde1df3 Mon Sep 17 00:00:00 2001 From: Dean Tribble Date: Thu, 7 Sep 2023 18:30:38 -0700 Subject: [PATCH 13/44] doc: Update main/guides/integration/chain-integration.md Co-authored-by: Michael FIG --- main/guides/integration/chain-integration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/guides/integration/chain-integration.md b/main/guides/integration/chain-integration.md index ce53bb3f2..6bc9d0f24 100644 --- a/main/guides/integration/chain-integration.md +++ b/main/guides/integration/chain-integration.md @@ -28,7 +28,7 @@ The chain can also be accessed via JavaScript using the [`cosmjs` library](https # Tools ## Building `agd` -The `agd` command line tool can be built as described in the Agoric [getting-started documentation](https://docs.agoric.com/guides/getting-started). The "Build the Cosmic Swingset Package" step generates `agd`. To confirm that `agd` is in you `$PATH`, execute +The `agd` command line tool can be built as described in the Agoric [getting-started documentation](https://docs.agoric.com/guides/getting-started#build-the-cosmic-swingset-package). The linked step builds `agd`. To confirm that `agd` is in your `$PATH`, execute ``` agd version --long ``` From 8ac9fdd0a9574ec1a2b449083c966abe8ea69b2c Mon Sep 17 00:00:00 2001 From: Dean Tribble Date: Thu, 7 Sep 2023 18:31:09 -0700 Subject: [PATCH 14/44] doc: Update main/guides/integration/chain-integration.md Co-authored-by: Michael FIG --- main/guides/integration/chain-integration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/guides/integration/chain-integration.md b/main/guides/integration/chain-integration.md index 6bc9d0f24..22920a106 100644 --- a/main/guides/integration/chain-integration.md +++ b/main/guides/integration/chain-integration.md @@ -1,6 +1,6 @@ # Integrating with Agoric Network -The Agoric network builds a blockchain for smart contracts in JavaScript using the `cosmos-sdk`. Cosmos-sdk is software that provides the widely-used Tendermint/CosmosBFT consensus and best-in-class support for chain operations like staking and governance. For simplicity of chain integration, the Agoric Network works identically to the Cosmos Hub, except using different parameters (e.g., `ubld` instead of `uatom`). +The Agoric network builds a blockchain for smart contracts in JavaScript using the `cosmos-sdk`. Cosmos-sdk is software that provides the widely-used Tendermint/CometBFT consensus and best-in-class support for chain operations like staking and governance. For simplicity of chain integration, the Agoric Network works identically to the Cosmos Hub, except using different parameters (e.g., `ubld` instead of `uatom`). ## TL;DR for Cosmos-experienced From d37e747e137bdb31afc4d2e0d6172d0d47f70ca6 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Wed, 20 Sep 2023 14:32:28 -0400 Subject: [PATCH 15/44] fix(getting-started): Correct typo in vstorage sequence diagram Fixes #853 --- main/guides/getting-started/assets/vstorage-brand-q.mmd | 6 +++--- main/guides/getting-started/assets/vstorage-brand-q.svg | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/main/guides/getting-started/assets/vstorage-brand-q.mmd b/main/guides/getting-started/assets/vstorage-brand-q.mmd index c78f98817..057cddb3a 100644 --- a/main/guides/getting-started/assets/vstorage-brand-q.mmd +++ b/main/guides/getting-started/assets/vstorage-brand-q.mmd @@ -12,7 +12,7 @@ sequenceDiagram agoricNames->>chainStorage: E(root).makeChildNode('brand') chainStorage-->>agoricNames: brandNode - agoricNames-->>chainStorage: E(invbrandNodeNode).setValue('...IST...') - chainStorage->>chain: change(
'published.agoricNames.brand',
'...IST...') - client->>chain: Data(
'published.agoricNames.brand') + agoricNames-->>chainStorage: E(brandNode).setValue('...IST...') + chainStorage->>chain: change('published.agoricNames.brand', '...IST...') + client->>chain: query('published.agoricNames.brand') chain-->>client: '...IST...' diff --git a/main/guides/getting-started/assets/vstorage-brand-q.svg b/main/guides/getting-started/assets/vstorage-brand-q.svg index 74dfbf442..0a5bc5e25 100644 --- a/main/guides/getting-started/assets/vstorage-brand-q.svg +++ b/main/guides/getting-started/assets/vstorage-brand-q.svg @@ -1 +1 @@ -Hardened JS VMCosmos SDK layerclientchainchainStorageagoricNamesE(root).makeChildNode('brand')brandNodeE(invbrandNodeNode).setValue('...IST...')change('...brand', '...IST...')query('...brand')'...IST...'clientchainchainStorageagoricNames \ No newline at end of file +Hardened JS VMCosmos SDK layeragoricNameschainStoragechainagoricNameschainStoragechainclientE(root).makeChildNode('brand')brandNodeE(brandNode).setValue('...IST...')change('...brand', '...IST...')query('...brand')'...IST...'client From ea45d1945a3a34e7c11063ec30a7ac0f316306e6 Mon Sep 17 00:00:00 2001 From: Ivan Leichtling Date: Fri, 29 Sep 2023 16:56:50 -0400 Subject: [PATCH 16/44] Initial sketch of new homepage --- main/README.md | 95 +++++++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 60 insertions(+), 37 deletions(-) diff --git a/main/README.md b/main/README.md index ac035b6ec..d4b3349d5 100644 --- a/main/README.md +++ b/main/README.md @@ -4,53 +4,76 @@ # run `yarn docs:dev` at any time to start local dev server and access # website at localhost:8080 by default #### -home: true # use default home page layout (hero image with text, features section) -heroImage: /logo.svg +home: false # use default home page layout (hero image with text, features section) +# heroImage: /logo.svg ## Action button -actionText: Get Started → # text that goes in the button -actionLink: /guides/getting-started/ # go-to link when clicking on button +# actionText: Get Started → # text that goes in the button +# actionLink: /guides/getting-started/ # go-to link when clicking on button ## Features section -features: - - title: Electronic Rights Transfer Protocol (ERTP) - details: Agoric empowers individuals to securely execute transactions, establish new markets, and craft novel patterns of exchange — without centralized control. +# features: +# - title: Electronic Rights Transfer Protocol (ERTP) +# details: Agoric empowers individuals to securely execute transactions, establish new markets, and craft novel patterns of exchange — without centralized control. - - title: Better security architecture with OCaps - details: Agoric uses an object-capability model (OCaps) security architecture, in which access to a programming object itself is the authority to use the object. +# - title: Better security architecture with OCaps +# details: Agoric uses an object-capability model (OCaps) security architecture, in which access to a programming object itself is the authority to use the object. - - title: Securely Create and Transfer Assets - details: All kinds of digital assets can be easily created, but importantly, they can be transferred in exactly the same ways, with exactly the same security properties. +# - title: Securely Create and Transfer Assets +# details: All kinds of digital assets can be easily created, but importantly, they can be transferred in exactly the same ways, with exactly the same security properties. -footer: Apache-2.0 Licensed | Copyright © 2022 - Agoric +footer: Apache-2.0 Licensed | Copyright © 2023 - Agoric --- -
-

- Learn about ERTP (Electronic Rights Transfer Protocol), a uniform way of transferring tokens and other digital assets in JavaScript. -

- +
+

Agoric documentation

+
+ The Agoric platform makes it possible to write safer smart contracts with your JavaSCript skillset. +
-
-
-

Check out Zoe, a smart contract framework responsible for enforcing what we call "offer safety". The smart contracts that run on top of Zoe are responsible for figuring out proposed reallocations of resources. -

- + +
+ +
+

Blockchain resources

+
+ The tools your need to get the job done. +
-## The Platform +
-Building on 30 years of experience, Agoric is developing a secure distributed object-capabilities (OCap) platform for smart contracts and market-oriented programming. Our platform supports the development of smart contracts and market institutions across many different scales, from large public blockchains to small two-party contracts. +
+

Ready to learn more?

+
+ Once you've completed the Getting Started here are a few more steps.. +
+
+

+ Learn the basics of HardenedJS +

+
+ It's just JavaScript but with extra safety features - see why MetaMask uses it to safely run their Snaps technology for 30M+ customers. +
+
-Our OCaps platform consists of: +
+

+ See the safety properties of our Zoe Framework +

+
+ From Offer Safety to the POLA, the Zoe Framework protects devs (and users) while writing your smart contract logic. +
+
+
+ +
+

Videos

+
+ Check out our primer on writing programmable smart contracts in JavaScript! +
+ +
-- A robust architecture for building secure smart contracts. -- A foundation in JavaScript for maximum reach. -- A cryptographic routing fabric for inter-chain interoperability. -- A library of market abstractions and a framework for securely composing them. -- A framework for secure user interaction. +
+

Connect with us

+
\ No newline at end of file diff --git a/package.json b/package.json index 311a1738f..7ca5a05c8 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "node": "^16.13 || ^18.12" }, "scripts": { - "docs:dev": "NODE_OPTIONS=--openssl-legacy-provider vuepress dev main", + "docs:dev": "vuepress dev main", "docs:build": "NODE_OPTIONS=--openssl-legacy-provider vuepress build main", "docs:build-cf": "NODE_OPTIONS=--openssl-legacy-provider vuepress build main && cp _redirects main/.vuepress/dist/", "docs:build-root": "NODE_OPTIONS=--openssl-legacy-provider yarn docs:build && yarn docs:re-root && cp _redirects main/.vuepress/dist-root/", From bb1c8cbbf89a6a796add4ae4bb1ef401e35e2d9b Mon Sep 17 00:00:00 2001 From: Ivan Leichtling Date: Fri, 29 Sep 2023 20:27:35 -0400 Subject: [PATCH 17/44] Use vuepress component for button row --- main/.vuepress/components/HomeButtonRow.vue | 74 +++++++++++++++++++++ main/.vuepress/styles/index.styl | 38 +++++++++++ main/README.md | 30 ++++++--- 3 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 main/.vuepress/components/HomeButtonRow.vue diff --git a/main/.vuepress/components/HomeButtonRow.vue b/main/.vuepress/components/HomeButtonRow.vue new file mode 100644 index 000000000..991bf8641 --- /dev/null +++ b/main/.vuepress/components/HomeButtonRow.vue @@ -0,0 +1,74 @@ + + + \ No newline at end of file diff --git a/main/.vuepress/styles/index.styl b/main/.vuepress/styles/index.styl index 1d3ede334..eb4b1110b 100644 --- a/main/.vuepress/styles/index.styl +++ b/main/.vuepress/styles/index.styl @@ -91,6 +91,16 @@ .flex display flex + border thin + + &--auto + flex-basis auto + + @--nowrap + flex-flow nowrap + + &--row + flex-direction row &--column flex-direction column @@ -98,6 +108,34 @@ &--center align-items center + @--one + flex-grow 1 + +.home-col + display flex + border thin + flex-direction column + width 100% + align-items stretch + +.home-row + display flex + border thin + flex-direction row + flex-flow nowrap + flex-basis auto + width 100% + height 8em + +.home-button + flex-grow 1 + border-style solid + border-color LightGrey + margin: .25em + padding 1em + vertical-align top + width 30% + .zoe-version font-size: .75em border-bottom: 1px #2c3e50 solid diff --git a/main/README.md b/main/README.md index d4b3349d5..6604fbf40 100644 --- a/main/README.md +++ b/main/README.md @@ -5,10 +5,6 @@ # website at localhost:8080 by default #### home: false # use default home page layout (hero image with text, features section) -# heroImage: /logo.svg -## Action button -# actionText: Get Started → # text that goes in the button -# actionLink: /guides/getting-started/ # go-to link when clicking on button ## Features section # features: @@ -25,9 +21,27 @@ footer: Apache-2.0 Licensed | Copyright © 2023 - Agoric ---
-

Agoric documentation

-
- The Agoric platform makes it possible to write safer smart contracts with your JavaSCript skillset. +

Agoric documentation

+
+ The Agoric platform makes it possible to write safer smart contracts with your JavaScript skillset. +
+
+ +
@@ -71,7 +85,7 @@ footer: Apache-2.0 Licensed | Copyright © 2023 - Agoric
Check out our primer on writing programmable smart contracts in JavaScript!
- +
From d01193b2805882c611f832fd4bc42081b4773c39 Mon Sep 17 00:00:00 2001 From: Ivan Leichtling Date: Fri, 29 Sep 2023 20:51:52 -0400 Subject: [PATCH 18/44] add some targets for links --- main/.vuepress/components/HomeButtonRow.vue | 60 +++++++++------- main/README.md | 79 +++++++++++++++------ 2 files changed, 94 insertions(+), 45 deletions(-) diff --git a/main/.vuepress/components/HomeButtonRow.vue b/main/.vuepress/components/HomeButtonRow.vue index 991bf8641..ff0436897 100644 --- a/main/.vuepress/components/HomeButtonRow.vue +++ b/main/.vuepress/components/HomeButtonRow.vue @@ -1,24 +1,26 @@ + - \ No newline at end of file + \ No newline at end of file diff --git a/main/.vuepress/styles/index.styl b/main/.vuepress/styles/index.styl index eb4b1110b..36b1edf01 100644 --- a/main/.vuepress/styles/index.styl +++ b/main/.vuepress/styles/index.styl @@ -111,6 +111,12 @@ @--one flex-grow 1 +.home-section + display flex + border thin + flex-direction column + align-items left + .home-col display flex border thin diff --git a/main/README.md b/main/README.md index 6e2c78faf..4dbcb1dd6 100644 --- a/main/README.md +++ b/main/README.md @@ -5,26 +5,14 @@ # website at localhost:8080 by default #### home: false # use default home page layout (hero image with text, features section) - -## Features section -# features: -# - title: Electronic Rights Transfer Protocol (ERTP) -# details: Agoric empowers individuals to securely execute transactions, establish new markets, and craft novel patterns of exchange — without centralized control. - -# - title: Better security architecture with OCaps -# details: Agoric uses an object-capability model (OCaps) security architecture, in which access to a programming object itself is the authority to use the object. - -# - title: Securely Create and Transfer Assets -# details: All kinds of digital assets can be easily created, but importantly, they can be transferred in exactly the same ways, with exactly the same security properties. - footer: Apache-2.0 Licensed | Copyright © 2023 - Agoric --- -
-

Agoric documentation

-
- The Agoric platform makes it possible to write safer smart contracts with your JavaScript skillset. -
+
+
-
- -
-

Blockchain resources

-
- The tools your need to get the job done. -
+
+
-
- -
-

Ready to learn more?

-
- Once you've completed the Getting Started here are a few more steps.. -
-
-

- Learn the basics of HardenedJS -

-
- It's just JavaScript but with extra safety features - see why MetaMask uses it to safely run their Snaps technology for 30M+ customers. -
-
- -
-

- See the safety properties of our Zoe Framework -

-
- From Offer Safety to the POLA, the Zoe Framework protects devs (and users) while writing your smart contract logic. -
-
+
+ +

+ Learn the basics of HardenedJS +

+ It's just JavaScript but with extra safety features - see why MetaMask uses it to safely run their Snaps technology for 30M+ customers. +

+ See the safety properties of our Zoe Framework +

+ From Offer Safety to the POLA, the Zoe Framework protects devs (and users) while writing your smart contract logic.
-
-

Videos

-
- Check out our primer on writing programmable smart contracts in JavaScript! -
+
+
-
-

Connect with us

+
+ +
- From c766197cf930c3fd12e94f65acd3fed7e31f51a5 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Fri, 4 Aug 2023 00:08:21 -0500 Subject: [PATCH 20/44] add Getting Support: discord, office hours, discussions --- main/guides/getting-started/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main/guides/getting-started/README.md b/main/guides/getting-started/README.md index 52f397f2c..4072b4b43 100644 --- a/main/guides/getting-started/README.md +++ b/main/guides/getting-started/README.md @@ -7,6 +7,12 @@ Linux (WSL). There is currently **no support** for native Windows 10 or native W After installing the Agoric SDK, you can proceed to [starting a project](./start-a-project.md) with the Agoric CLI to create and deploy [smart contracts](./deploying.md). +## Getting Support + +- Chat with peers on the [Agoric Discord](https://agoric.com/discord) +- Join weekly [Office Hours](https://github.com/Agoric/agoric-sdk/wiki/Office-Hours) +- Search and post [Q & A](https://github.com/Agoric/agoric-sdk/discussions/categories/q-a) in [agoric-sdk discussions](https://github.com/Agoric/agoric-sdk/discussions) + ## Quick Start If you're familar with JavaScript development tools such as `node`, `yarn`, and `git`: From 95b077b7f05196fea927e2180aac7af0651a0d00 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Fri, 4 Aug 2023 00:12:59 -0500 Subject: [PATCH 21/44] Start Project: more concise ref to prev section --- main/guides/getting-started/start-a-project.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/main/guides/getting-started/start-a-project.md b/main/guides/getting-started/start-a-project.md index e74a248df..1740f5766 100644 --- a/main/guides/getting-started/start-a-project.md +++ b/main/guides/getting-started/start-a-project.md @@ -1,10 +1,7 @@ # Starting a Project -Before we begin, you should use `agoric --version` to double-check that you have [installed the Agoric SDK](./README.md). +After you've [installed the Agoric SDK](./README.md) (_recall: use `agoric --version` to confirm._), you're ready for your first _Agoric Dapp_ (decentralized application). -If it is available, then you successfully installed the Agoric SDK. If not, then please do so before continuing. - -After you've [installed the Agoric SDK](./README.md), then you're ready for your first _Agoric Dapp_ (decentralized application) by continuing the instructions below. We'll be running **three terminal windows**. See below: From 94dc421a05bd02cf561d00a3dd50e66b3f1324fd Mon Sep 17 00:00:00 2001 From: Ivan Leichtling Date: Fri, 29 Sep 2023 21:38:25 -0400 Subject: [PATCH 22/44] HomeButtons are now clickable anywhere --- main/.vuepress/components/HomeButtonRow.vue | 21 +++++++++++++++------ main/.vuepress/styles/index.styl | 11 ++++++++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/main/.vuepress/components/HomeButtonRow.vue b/main/.vuepress/components/HomeButtonRow.vue index 919c73d8b..9161eb065 100644 --- a/main/.vuepress/components/HomeButtonRow.vue +++ b/main/.vuepress/components/HomeButtonRow.vue @@ -2,24 +2,33 @@
- {{ title1 }} + + {{ title1 }} + +
- {{ text1 }} + {{ text1 }}
- {{ title2 }} + + {{ title2 }} + +
- {{ text2 }} + {{ text2 }}
- {{ title3 }} + + {{ title3 }} + +
- {{ text3 }} + {{ text3 }}
diff --git a/main/.vuepress/styles/index.styl b/main/.vuepress/styles/index.styl index 36b1edf01..b0efc3c9e 100644 --- a/main/.vuepress/styles/index.styl +++ b/main/.vuepress/styles/index.styl @@ -137,10 +137,19 @@ flex-grow 1 border-style solid border-color LightGrey - margin: .25em + margin .25em padding 1em vertical-align top width 30% + position relative + +.link-spanner + position absolute + width 100% + height 100% + top 0 + left 0 + z-index 1 .zoe-version font-size: .75em From 0d036955c92259d70f5aa81dc36f0010a35baa6c Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Fri, 4 Aug 2023 00:14:57 -0500 Subject: [PATCH 23/44] more XCode tip under platform --- main/guides/getting-started/README.md | 5 +++++ main/guides/getting-started/start-a-project.md | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/main/guides/getting-started/README.md b/main/guides/getting-started/README.md index 52f397f2c..9e67ffdca 100644 --- a/main/guides/getting-started/README.md +++ b/main/guides/getting-started/README.md @@ -48,6 +48,11 @@ The Agoric SDK is supported on Lin - To launch a terminal on Linux, use the **Terminal** application. - To access WSL from Windows, visit the [WSL documentation](https://docs.microsoft.com/en-us/windows/wsl/). +::: tip Mac Dev Tools +On a Mac, you must first install +[Xcode](https://apps.apple.com/us/app/xcode/id497799835) +::: + ## Install Go Download Go from [go.dev/doc/install](https://go.dev/doc/install) and follow the instructions for your platform. diff --git a/main/guides/getting-started/start-a-project.md b/main/guides/getting-started/start-a-project.md index 1740f5766..a3dbd2ae3 100644 --- a/main/guides/getting-started/start-a-project.md +++ b/main/guides/getting-started/start-a-project.md @@ -43,10 +43,6 @@ agoric start --verbose --reset # `agoric start --reset` to start over Learn more about the [available Dapp templates](../dapps/dapp-templates.md). -::: tip Mac Dev Tools -On a Mac, you must first install -[Xcode](https://apps.apple.com/us/app/xcode/id497799835) -::: Leave this process and its logs running in its own terminal window. From fbce831a7e956162893f2dff23c0335b51e85cec Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Fri, 4 Aug 2023 00:16:23 -0500 Subject: [PATCH 24/44] consolidate info on supported platform --- main/guides/getting-started/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/main/guides/getting-started/README.md b/main/guides/getting-started/README.md index 9e67ffdca..9135897db 100644 --- a/main/guides/getting-started/README.md +++ b/main/guides/getting-started/README.md @@ -1,15 +1,13 @@ # Installing the Agoric SDK To write JavaScript smart contracts using the Agoric Zoe framework, first install the Agoric Software -Development Kit (SDK). The Agoric SDK is currently supported on MacOS, Linux, and Windows Subsystem for -Linux (WSL). There is currently **no support** for native Windows 10 or native Windows 11. +Development Kit (SDK). -After installing the Agoric SDK, you can proceed to [starting a project](./start-a-project.md) with -the Agoric CLI to create and deploy [smart contracts](./deploying.md). +After installing the Agoric SDK, you can proceed to [starting a project](./start-a-project.md). ## Quick Start -If you're familar with JavaScript development tools such as `node`, `yarn`, and `git`: +If you're on a [supported platform](#platform-linux-shell-or-equivalent) (MacOS, Linux, or WSL) and you're familar with JavaScript development tools such as `node`, `yarn`, and `git`: ```shell go version # Version 1.20.3 or higher @@ -114,7 +112,9 @@ yarn install yarn build ``` -**Note:** MacOS, Linux, and WSL are currently supported. There is currently **no support** for native Windows 10 or native Windows 11. +**Note:** If this `yarn build` step fails, check that you are on a +[supported platform](#platform-linux-shell-or-equivalent) and +not native Windows. ## Build the Cosmic Swingset Package From 6db815073c7930d66fff631b6d81ebe873000ed6 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Fri, 4 Aug 2023 00:20:15 -0500 Subject: [PATCH 25/44] consolidate "command not found" trouble-shooting --- main/guides/getting-started/README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/main/guides/getting-started/README.md b/main/guides/getting-started/README.md index 9135897db..0f86ff046 100644 --- a/main/guides/getting-started/README.md +++ b/main/guides/getting-started/README.md @@ -24,7 +24,7 @@ agoric --version # Prints the version number of the SDK Now you are ready proceed to [starting a project](./start-a-project.md). -If `agoric` is not found, then you may need to add the parent directory of where your `yarn link-cli` command created a folder. For example, if you created a folder called `Agoric` in your `~/bin` directory, you may need to add `~/bin` to your PATH. +_If you get "command not found", see [troubleshooting below](#install-agoric-cli)._ ::: tip Watch: Prepare Your Agoric Environment (November 2020) This presentation is a good overview of the Agoric SDK setup process, @@ -138,6 +138,12 @@ sudo yarn link-cli /usr/local/bin/agoric **Note:** Run `echo $PATH` to see your current `$PATH`. Here you'll see which directory you should use for `yarn link-cli`. +::: tip Troubleshooting "command not found" +Watch: + +- [Linux add to \$PATH: Fix "command not found" error (Linux & Mac)](https://www.youtube.com/watch?v=gkqsLRDnqlA) 6:19 Mar 2018. + ::: + ## Check the Agoric Version To check that it's installed correctly: @@ -148,6 +154,4 @@ agoric --version # v0.18.2 "community-dev" branch If the install was successful, you are ready to proceed to [starting a project](./start-a-project.md). -Should `agoric` not be found, then you may need to add the parent directory of where your `yarn link-cli` command created the "agoric-sdk" directory. -Please see the youtube video [Linux add to \$PATH: Fix "command not found" error (Linux & Mac)](https://www.youtube.com/watch?v=gkqsLRDnqlA) for more information. From 6a8208caa42a18580076220720be5d429279030c Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Fri, 4 Aug 2023 00:23:27 -0500 Subject: [PATCH 26/44] separate `agoric start` from dapp template --- main/guides/getting-started/start-a-project.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main/guides/getting-started/start-a-project.md b/main/guides/getting-started/start-a-project.md index a3dbd2ae3..644be964d 100644 --- a/main/guides/getting-started/start-a-project.md +++ b/main/guides/getting-started/start-a-project.md @@ -25,8 +25,8 @@ This presentation includes starting a project, but note an outdated detail: ## Initialize the Default Dapp Template -The following section will explain how to initialize the default Dapp template, install the Agoric SDK -into the Dapp template, and then launch the Agoric Solo Client and Simulated Blockchain. +The following section will explain how to initialize the default Dapp template, and install the Agoric SDK +into the Dapp template. Use the [Agoric CLI](../agoric-cli/) to fetch from a Dapp template and put it in a directory _not located in your `agoric-sdk` clone_. We named the directory "demo", but you can name the folder whatever you like. @@ -38,11 +38,16 @@ cd $HOME agoric init --dapp-template dapp-card-store demo # use `agoric init --dapp-template dapp-card-store $DIRNAME` with any name you like cd demo agoric install community-dev # will take a minute to install all dependencies -agoric start --verbose --reset # `agoric start --reset` to start over ``` Learn more about the [available Dapp templates](../dapps/dapp-templates.md). +## Start Agoric Solo Client and Simulated Blockchain + +```sh +# Terminal 1 +agoric start --verbose --reset # `agoric start --reset` to start over +``` Leave this process and its logs running in its own terminal window. From bbba2d22df760e11c3d60d06e62850bd651a3403 Mon Sep 17 00:00:00 2001 From: Ivan Leichtling Date: Fri, 29 Sep 2023 22:27:01 -0400 Subject: [PATCH 27/44] add initial banner --- main/.vuepress/styles/index.styl | 12 ++++++++++++ main/README.md | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/main/.vuepress/styles/index.styl b/main/.vuepress/styles/index.styl index b0efc3c9e..8f39404fb 100644 --- a/main/.vuepress/styles/index.styl +++ b/main/.vuepress/styles/index.styl @@ -143,6 +143,18 @@ width 30% position relative +.home-banner + display flex + align-items stretch + justify-content center + position relative + width 100% + background #d73252 + color white + padding-top 1em + padding-bottom 1em + text-align center + .link-spanner position absolute width 100% diff --git a/main/README.md b/main/README.md index 4dbcb1dd6..5eae82881 100644 --- a/main/README.md +++ b/main/README.md @@ -8,6 +8,10 @@ home: false # use default home page layout (hero image with text, features secti footer: Apache-2.0 Licensed | Copyright © 2023 - Agoric --- + +
Date: Fri, 29 Sep 2023 23:19:49 -0400 Subject: [PATCH 28/44] Improve mobile rendering and speed --- main/.vuepress/config.js | 3 ++- main/.vuepress/styles/index.styl | 8 ++------ main/.vuepress/styles/palette.styl | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/main/.vuepress/config.js b/main/.vuepress/config.js index 811dabf78..ec8b81e2d 100644 --- a/main/.vuepress/config.js +++ b/main/.vuepress/config.js @@ -8,6 +8,7 @@ module.exports = { description: 'Build, deploy and operate dApps and DeFi markets.', // desc for the site; rendered as a tag in the page HTML // Extra tags to inject into the page HTML . You can specify each tag in the form of [tagName, { attrName: attrValue }, innerHTML?]. head: [ + ['meta', { name: 'viewport', content: 'width=device-width, initial-scale=1' }], ['link', { rel: 'icon', href: '/favicon-full.ico' }], [ 'style', @@ -25,7 +26,7 @@ module.exports = { ], [ 'script', - { src: 'https://www.googletagmanager.com/gtag/js?id=UA-118217811-1' }, + { src: 'https://www.googletagmanager.com/gtag/js?id=UA-118217811-1', async: '' }, ], [ 'script', diff --git a/main/.vuepress/styles/index.styl b/main/.vuepress/styles/index.styl index 8f39404fb..6d8f2212a 100644 --- a/main/.vuepress/styles/index.styl +++ b/main/.vuepress/styles/index.styl @@ -118,11 +118,8 @@ align-items left .home-col - display flex border thin - flex-direction column width 100% - align-items stretch .home-row display flex @@ -131,7 +128,7 @@ flex-flow nowrap flex-basis auto width 100% - height 8em + min-height 7em .home-button flex-grow 1 @@ -147,13 +144,12 @@ display flex align-items stretch justify-content center - position relative + min-width 100% width 100% background #d73252 color white padding-top 1em padding-bottom 1em - text-align center .link-spanner position absolute diff --git a/main/.vuepress/styles/palette.styl b/main/.vuepress/styles/palette.styl index ae17bb001..9588f24b7 100644 --- a/main/.vuepress/styles/palette.styl +++ b/main/.vuepress/styles/palette.styl @@ -8,4 +8,4 @@ $badgeWarningColor = darken(#ffe564, 35%) $badgeErrorColor = #DA5961 // Additional color variables for use in site -$white = #FFF +$white = #FFF \ No newline at end of file From 7b39df4977784ae233fab1ca26ec234e04feb5d2 Mon Sep 17 00:00:00 2001 From: Ivan Leichtling Date: Fri, 29 Sep 2023 23:51:06 -0400 Subject: [PATCH 29/44] better left/right padding on banner --- main/.vuepress/styles/index.styl | 3 +-- main/README.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/main/.vuepress/styles/index.styl b/main/.vuepress/styles/index.styl index 6d8f2212a..deee0a5ff 100644 --- a/main/.vuepress/styles/index.styl +++ b/main/.vuepress/styles/index.styl @@ -148,8 +148,7 @@ width 100% background #d73252 color white - padding-top 1em - padding-bottom 1em + padding 1em .link-spanner position absolute diff --git a/main/README.md b/main/README.md index 5eae82881..a54a8c2e3 100644 --- a/main/README.md +++ b/main/README.md @@ -4,7 +4,7 @@ # run `yarn docs:dev` at any time to start local dev server and access # website at localhost:8080 by default #### -home: false # use default home page layout (hero image with text, features section) +home: false footer: Apache-2.0 Licensed | Copyright © 2023 - Agoric --- From cffb3ffc063f459e9c2a2383bd854aa80a191fec Mon Sep 17 00:00:00 2001 From: Ivan Leichtling Date: Sat, 30 Sep 2023 10:29:36 -0400 Subject: [PATCH 30/44] look better on mobile by moving to grid and ensuring video does not maintain too large a min size --- .../.vuepress/components/HomeButtonHeader.vue | 4 +- main/.vuepress/components/HomeButtonRow.vue | 125 ++++++++++++++---- main/.vuepress/styles/index.styl | 47 ++----- main/.vuepress/styles/palette.styl | 6 +- main/README.md | 117 ++++++++-------- 5 files changed, 166 insertions(+), 133 deletions(-) diff --git a/main/.vuepress/components/HomeButtonHeader.vue b/main/.vuepress/components/HomeButtonHeader.vue index 4e412ca53..aac60147a 100644 --- a/main/.vuepress/components/HomeButtonHeader.vue +++ b/main/.vuepress/components/HomeButtonHeader.vue @@ -1,6 +1,6 @@