Fix nft transactions (#229)
* Removed pluginType "hack" * Fix some ERC 721 & 1155 function signature hashes * Fix UI for ERC721 operations * Explicit Batch Transfer UI with ERC1155 * Unified some ERC721 & 1155 non-static functions naming * Fix UI for ERC1155 operations * Added missing pin-lock check when signing transactions * Fix the shell script that builds the elf files for testing * Add tests dependency ethers * Removed the space in the test filename * Tests build script refactoring * Now works when called from anywhere (not just the script's directory) * Now handles LNS & LNX builds together (less duplicated code) * Temporarily disable Nano X tests Until Zemu supports Nano X 2.0 SDK * Tests now start with blind signing disabled Makes it closer to reality & very few of them requires it * Update to the latest sdk version * make eth_plugin_perform_init() readable Introduce 2 functions. * Now properly parses the apdu and displays the total quantity of NFT IDs transferred in ERC1155 batch transfer * Add NFT prod public keys * Added extra checks for the chain ID handling Following the security review * NFTs now only supported by LNS * Version bump Co-authored-by: Alexandre Paillier <alexandre.paillier@ledger.fr> Co-authored-by: greenknot <greenknot@users.noreply.github.com>
14
CHANGELOG.md
@@ -5,11 +5,21 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
## [1.9.14](https://github.com/ledgerhq/app-ethereum/compare/1.9.13...1.9.14) - 2021-11-22
|
## [1.9.15](https://github.com/ledgerhq/app-ethereum/compare/1.9.14...1.9.15) - 2021-12-15
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Support for Non-Fungible Token (ERC 721 & ERC 1155)
|
- Support for Non-Fungible Token (ERC-721 & ERC-1155)
|
||||||
|
|
||||||
|
## [1.9.14](https://github.com/ledgerhq/app-ethereum/compare/1.9.13...1.9.14) - 2021-11-30
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added Moonriver BIP44 1285
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed stark order signature on LNS
|
||||||
|
|
||||||
## [1.9.13](https://github.com/ledgerhq/app-ethereum/compare/1.9.12...1.9.13) - 2021-11-17
|
## [1.9.13](https://github.com/ledgerhq/app-ethereum/compare/1.9.12...1.9.13) - 2021-11-17
|
||||||
|
|
||||||
|
|||||||
6
Makefile
@@ -30,7 +30,7 @@ APP_LOAD_PARAMS += --path "1517992542'/1101353413'"
|
|||||||
|
|
||||||
APPVERSION_M=1
|
APPVERSION_M=1
|
||||||
APPVERSION_N=9
|
APPVERSION_N=9
|
||||||
APPVERSION_P=14
|
APPVERSION_P=15
|
||||||
APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)
|
APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)
|
||||||
APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION)
|
APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION)
|
||||||
|
|
||||||
@@ -306,11 +306,15 @@ ifneq ($(BYPASS_SIGNATURES),0)
|
|||||||
DEFINES += HAVE_BYPASS_SIGNATURES
|
DEFINES += HAVE_BYPASS_SIGNATURES
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# NFTs
|
||||||
|
ifeq ($(TARGET_NAME), TARGET_NANOX)
|
||||||
|
DEFINES += HAVE_NFT_SUPPORT
|
||||||
# Enable the NFT testing key
|
# Enable the NFT testing key
|
||||||
NFT_TESTING_KEY:=0
|
NFT_TESTING_KEY:=0
|
||||||
ifneq ($(NFT_TESTING_KEY),0)
|
ifneq ($(NFT_TESTING_KEY),0)
|
||||||
DEFINES += HAVE_NFT_TESTING_KEY
|
DEFINES += HAVE_NFT_TESTING_KEY
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Enabling debug PRINTF
|
# Enabling debug PRINTF
|
||||||
|
|||||||
@@ -72,69 +72,77 @@ void eth_plugin_prepare_query_contract_UI(ethQueryContractUI_t *queryContractUI,
|
|||||||
queryContractUI->msgLength = msgLength;
|
queryContractUI->msgLength = msgLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void eth_plugin_perform_init_default(uint8_t *contractAddress,
|
||||||
|
ethPluginInitContract_t *init) {
|
||||||
|
// check if the registered external plugin matches the TX contract address / selector
|
||||||
|
if (memcmp(contractAddress,
|
||||||
|
dataContext.tokenContext.contractAddress,
|
||||||
|
sizeof(dataContext.tokenContext.contractAddress)) != 0) {
|
||||||
|
PRINTF("Got contract: %.*H\n", ADDRESS_LENGTH, contractAddress);
|
||||||
|
PRINTF("Expected contract: %.*H\n",
|
||||||
|
ADDRESS_LENGTH,
|
||||||
|
dataContext.tokenContext.contractAddress);
|
||||||
|
os_sched_exit(0);
|
||||||
|
}
|
||||||
|
if (memcmp(init->selector,
|
||||||
|
dataContext.tokenContext.methodSelector,
|
||||||
|
sizeof(dataContext.tokenContext.methodSelector)) != 0) {
|
||||||
|
PRINTF("Got selector: %.*H\n", SELECTOR_SIZE, init->selector);
|
||||||
|
PRINTF("Expected selector: %.*H\n", SELECTOR_SIZE, dataContext.tokenContext.methodSelector);
|
||||||
|
os_sched_exit(0);
|
||||||
|
}
|
||||||
|
PRINTF("Plugin will be used\n");
|
||||||
|
dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool eth_plugin_perform_init_old_internal(uint8_t *contractAddress,
|
||||||
|
ethPluginInitContract_t *init) {
|
||||||
|
uint8_t i, j;
|
||||||
|
const uint8_t **selectors;
|
||||||
|
|
||||||
|
// Search internal plugin list
|
||||||
|
for (i = 0;; i++) {
|
||||||
|
selectors = (const uint8_t **) PIC(INTERNAL_ETH_PLUGINS[i].selectors);
|
||||||
|
if (selectors == NULL) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (j = 0; ((j < INTERNAL_ETH_PLUGINS[i].num_selectors) && (contractAddress != NULL));
|
||||||
|
j++) {
|
||||||
|
if (memcmp(init->selector, (const void *) PIC(selectors[j]), SELECTOR_SIZE) == 0) {
|
||||||
|
if ((INTERNAL_ETH_PLUGINS[i].availableCheck == NULL) ||
|
||||||
|
((PluginAvailableCheck) PIC(INTERNAL_ETH_PLUGINS[i].availableCheck))()) {
|
||||||
|
strlcpy(dataContext.tokenContext.pluginName,
|
||||||
|
INTERNAL_ETH_PLUGINS[i].alias,
|
||||||
|
PLUGIN_ID_LENGTH);
|
||||||
|
dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_OK;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
eth_plugin_result_t eth_plugin_perform_init(uint8_t *contractAddress,
|
eth_plugin_result_t eth_plugin_perform_init(uint8_t *contractAddress,
|
||||||
ethPluginInitContract_t *init) {
|
ethPluginInitContract_t *init) {
|
||||||
uint8_t i;
|
|
||||||
const uint8_t **selectors;
|
|
||||||
dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_UNAVAILABLE;
|
dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_UNAVAILABLE;
|
||||||
|
|
||||||
PRINTF("Selector %.*H\n", 4, init->selector);
|
PRINTF("Selector %.*H\n", 4, init->selector);
|
||||||
switch (pluginType) {
|
switch (pluginType) {
|
||||||
case NOT_OLD_INTERNAL:
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
case ERC1155:
|
case ERC1155:
|
||||||
case ERC721:
|
case ERC721:
|
||||||
case EXTERNAL: {
|
#endif // HAVE_NFT_SUPPORT
|
||||||
// check if the registered external plugin matches the TX contract address / selector
|
case EXTERNAL:
|
||||||
if (memcmp(contractAddress,
|
eth_plugin_perform_init_default(contractAddress, init);
|
||||||
dataContext.tokenContext.contractAddress,
|
|
||||||
sizeof(dataContext.tokenContext.contractAddress)) != 0) {
|
|
||||||
PRINTF("Got contract: %.*H\n", ADDRESS_LENGTH, contractAddress);
|
|
||||||
PRINTF("Expected contract: %.*H\n",
|
|
||||||
ADDRESS_LENGTH,
|
|
||||||
dataContext.tokenContext.contractAddress);
|
|
||||||
os_sched_exit(0);
|
|
||||||
}
|
|
||||||
if (memcmp(init->selector,
|
|
||||||
dataContext.tokenContext.methodSelector,
|
|
||||||
sizeof(dataContext.tokenContext.methodSelector)) != 0) {
|
|
||||||
PRINTF("Got selector: %.*H\n", SELECTOR_SIZE, init->selector);
|
|
||||||
PRINTF("Expected selector: %.*H\n",
|
|
||||||
SELECTOR_SIZE,
|
|
||||||
dataContext.tokenContext.methodSelector);
|
|
||||||
os_sched_exit(0);
|
|
||||||
}
|
|
||||||
PRINTF("Plugin will be used\n");
|
|
||||||
// TODO: Add check for chainid.
|
|
||||||
dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_OK;
|
|
||||||
contractAddress = NULL;
|
contractAddress = NULL;
|
||||||
} break;
|
break;
|
||||||
case OLD_INTERNAL: {
|
case OLD_INTERNAL:
|
||||||
// Search internal plugin list
|
if (eth_plugin_perform_init_old_internal(contractAddress, init)) {
|
||||||
for (i = 0;; i++) {
|
contractAddress = NULL;
|
||||||
uint8_t j;
|
|
||||||
selectors = (const uint8_t **) PIC(INTERNAL_ETH_PLUGINS[i].selectors);
|
|
||||||
if (selectors == NULL) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for (j = 0;
|
|
||||||
((j < INTERNAL_ETH_PLUGINS[i].num_selectors) && (contractAddress != NULL));
|
|
||||||
j++) {
|
|
||||||
if (memcmp(init->selector, (const void *) PIC(selectors[j]), SELECTOR_SIZE) ==
|
|
||||||
0) {
|
|
||||||
if ((INTERNAL_ETH_PLUGINS[i].availableCheck == NULL) ||
|
|
||||||
((PluginAvailableCheck) PIC(
|
|
||||||
INTERNAL_ETH_PLUGINS[i].availableCheck))()) {
|
|
||||||
strlcpy(dataContext.tokenContext.pluginName,
|
|
||||||
INTERNAL_ETH_PLUGINS[i].alias,
|
|
||||||
PLUGIN_ID_LENGTH);
|
|
||||||
dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_OK;
|
|
||||||
contractAddress = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} break;
|
break;
|
||||||
default:
|
default:
|
||||||
PRINTF("Unsupported pluginType %d\n", pluginType);
|
PRINTF("Unsupported pluginType %d\n", pluginType);
|
||||||
os_sched_exit(0);
|
os_sched_exit(0);
|
||||||
@@ -242,8 +250,6 @@ eth_plugin_result_t eth_plugin_call(int method, void *parameter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (pluginType) {
|
switch (pluginType) {
|
||||||
case NOT_OLD_INTERNAL:
|
|
||||||
break;
|
|
||||||
case EXTERNAL: {
|
case EXTERNAL: {
|
||||||
uint32_t params[3];
|
uint32_t params[3];
|
||||||
params[0] = (uint32_t) alias;
|
params[0] = (uint32_t) alias;
|
||||||
@@ -262,6 +268,7 @@ eth_plugin_result_t eth_plugin_call(int method, void *parameter) {
|
|||||||
END_TRY;
|
END_TRY;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
case ERC721: {
|
case ERC721: {
|
||||||
erc721_plugin_call(method, parameter);
|
erc721_plugin_call(method, parameter);
|
||||||
break;
|
break;
|
||||||
@@ -270,6 +277,7 @@ eth_plugin_result_t eth_plugin_call(int method, void *parameter) {
|
|||||||
erc1155_plugin_call(method, parameter);
|
erc1155_plugin_call(method, parameter);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
case OLD_INTERNAL: {
|
case OLD_INTERNAL: {
|
||||||
// Perform the call
|
// Perform the call
|
||||||
for (i = 0;; i++) {
|
for (i = 0;; i++) {
|
||||||
|
|||||||
@@ -513,6 +513,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
|
|||||||
tx);
|
tx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
case INS_PROVIDE_NFT_INFORMATION:
|
case INS_PROVIDE_NFT_INFORMATION:
|
||||||
handleProvideNFTInformation(G_io_apdu_buffer[OFFSET_P1],
|
handleProvideNFTInformation(G_io_apdu_buffer[OFFSET_P1],
|
||||||
G_io_apdu_buffer[OFFSET_P2],
|
G_io_apdu_buffer[OFFSET_P2],
|
||||||
@@ -521,6 +522,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
|
|||||||
flags,
|
flags,
|
||||||
tx);
|
tx);
|
||||||
break;
|
break;
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
case INS_SET_EXTERNAL_PLUGIN:
|
case INS_SET_EXTERNAL_PLUGIN:
|
||||||
handleSetExternalPlugin(G_io_apdu_buffer[OFFSET_P1],
|
handleSetExternalPlugin(G_io_apdu_buffer[OFFSET_P1],
|
||||||
|
|||||||
@@ -207,8 +207,7 @@ typedef enum {
|
|||||||
EXTERNAL, // External plugin, set by setExternalPlugin.
|
EXTERNAL, // External plugin, set by setExternalPlugin.
|
||||||
ERC721, // Specific ERC721 internal plugin, set by setPlugin.
|
ERC721, // Specific ERC721 internal plugin, set by setPlugin.
|
||||||
ERC1155, // Specific ERC1155 internal plugin, set by setPlugin
|
ERC1155, // Specific ERC1155 internal plugin, set by setPlugin
|
||||||
OLD_INTERNAL, // Old internal plugin, not set by any command.
|
OLD_INTERNAL // Old internal plugin, not set by any command.
|
||||||
NOT_OLD_INTERNAL, // Do not treat this tx as an old internal transaction.
|
|
||||||
} pluginType_t;
|
} pluginType_t;
|
||||||
|
|
||||||
extern pluginType_t pluginType;
|
extern pluginType_t pluginType;
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
@@ -16,8 +18,8 @@
|
|||||||
#define MIN_DER_SIG_SIZE 67
|
#define MIN_DER_SIG_SIZE 67
|
||||||
#define MAX_DER_SIG_SIZE 72
|
#define MAX_DER_SIG_SIZE 72
|
||||||
|
|
||||||
#define TESTING_KEY 0
|
#define TEST_NFT_METADATA_KEY 0
|
||||||
#define NFT_METADATA_KEY_1 1
|
#define PROD_NFT_METADATA_KEY 1
|
||||||
|
|
||||||
#define ALGORITHM_ID_1 1
|
#define ALGORITHM_ID_1 1
|
||||||
|
|
||||||
@@ -25,17 +27,22 @@
|
|||||||
|
|
||||||
#define VERSION_1 1
|
#define VERSION_1 1
|
||||||
|
|
||||||
|
static const uint8_t LEDGER_NFT_METADATA_PUBLIC_KEY[] = {
|
||||||
#ifdef HAVE_NFT_TESTING_KEY
|
#ifdef HAVE_NFT_TESTING_KEY
|
||||||
static const uint8_t LEDGER_NFT_PUBLIC_KEY[] = {
|
|
||||||
0x04, 0xf5, 0x70, 0x0c, 0xa1, 0xe8, 0x74, 0x24, 0xc7, 0xc7, 0xd1, 0x19, 0xe7,
|
0x04, 0xf5, 0x70, 0x0c, 0xa1, 0xe8, 0x74, 0x24, 0xc7, 0xc7, 0xd1, 0x19, 0xe7,
|
||||||
0xe3, 0xc1, 0x89, 0xb1, 0x62, 0x50, 0x94, 0xdb, 0x6e, 0xa0, 0x40, 0x87, 0xc8,
|
0xe3, 0xc1, 0x89, 0xb1, 0x62, 0x50, 0x94, 0xdb, 0x6e, 0xa0, 0x40, 0x87, 0xc8,
|
||||||
0x30, 0x00, 0x7d, 0x0b, 0x46, 0x9a, 0x53, 0x11, 0xee, 0x6a, 0x1a, 0xcd, 0x1d,
|
0x30, 0x00, 0x7d, 0x0b, 0x46, 0x9a, 0x53, 0x11, 0xee, 0x6a, 0x1a, 0xcd, 0x1d,
|
||||||
0xa5, 0xaa, 0xb0, 0xf5, 0xc6, 0xdf, 0x13, 0x15, 0x8d, 0x28, 0xcc, 0x12, 0xd1,
|
0xa5, 0xaa, 0xb0, 0xf5, 0xc6, 0xdf, 0x13, 0x15, 0x8d, 0x28, 0xcc, 0x12, 0xd1,
|
||||||
0xdd, 0xa6, 0xec, 0xe9, 0x46, 0xb8, 0x9d, 0x5c, 0x05, 0x49, 0x92, 0x59, 0xc4};
|
0xdd, 0xa6, 0xec, 0xe9, 0x46, 0xb8, 0x9d, 0x5c, 0x05, 0x49, 0x92, 0x59, 0xc4
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static const uint8_t LEDGER_NFT_PUBLIC_KEY[] = {};
|
0x04, 0x98, 0x8d, 0xa6, 0xb2, 0x46, 0xf2, 0x8e, 0x77, 0xc1, 0xba, 0xb6, 0x75,
|
||||||
|
0xcb, 0x2a, 0x27, 0x44, 0xf7, 0xf5, 0xce, 0xc5, 0x6a, 0xe6, 0xe0, 0x32, 0x23,
|
||||||
|
0x33, 0x7b, 0x57, 0x94, 0xcd, 0x6a, 0xe0, 0x7d, 0x48, 0xb3, 0x0d, 0xb9, 0xcc,
|
||||||
|
0xb4, 0x0f, 0x5a, 0x02, 0xa1, 0x1a, 0x3a, 0xb9, 0x9d, 0x5f, 0x59, 0x5a, 0x3d,
|
||||||
|
0x50, 0xa0, 0xe1, 0x30, 0x23, 0xfd, 0x0d, 0x95, 0x87, 0x92, 0xd7, 0x97, 0x01
|
||||||
#endif
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
typedef bool verificationAlgo(const cx_ecfp_public_key_t *,
|
typedef bool verificationAlgo(const cx_ecfp_public_key_t *,
|
||||||
int,
|
int,
|
||||||
@@ -129,9 +136,14 @@ void handleProvideNFTInformation(uint8_t p1,
|
|||||||
PRINTF("Address: %.*H\n", ADDRESS_LENGTH, workBuffer + offset);
|
PRINTF("Address: %.*H\n", ADDRESS_LENGTH, workBuffer + offset);
|
||||||
offset += ADDRESS_LENGTH;
|
offset += ADDRESS_LENGTH;
|
||||||
|
|
||||||
// TODO: store chainID and assert that tx is using the same chainid.
|
uint64_t chainId = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE);
|
||||||
// uint64_t chainid = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE);
|
// this prints raw data, so to have a more meaningful print, display
|
||||||
// PRINTF("ChainID: %.*H\n", sizeof(chainid), &chainid);
|
// the buffer before the endianness swap
|
||||||
|
PRINTF("ChainID: %.*H\n", sizeof(chainId), (workBuffer + offset));
|
||||||
|
if ((chainConfig->chainId != 0) && (chainConfig->chainId != chainId)) {
|
||||||
|
PRINTF("Chain ID token mismatch\n");
|
||||||
|
THROW(0x6A80);
|
||||||
|
}
|
||||||
offset += CHAIN_ID_SIZE;
|
offset += CHAIN_ID_SIZE;
|
||||||
|
|
||||||
uint8_t keyId = workBuffer[offset];
|
uint8_t keyId = workBuffer[offset];
|
||||||
@@ -141,11 +153,11 @@ void handleProvideNFTInformation(uint8_t p1,
|
|||||||
PRINTF("KeyID: %d\n", keyId);
|
PRINTF("KeyID: %d\n", keyId);
|
||||||
switch (keyId) {
|
switch (keyId) {
|
||||||
#ifdef HAVE_NFT_TESTING_KEY
|
#ifdef HAVE_NFT_TESTING_KEY
|
||||||
case TESTING_KEY:
|
case TEST_NFT_METADATA_KEY:
|
||||||
#endif
|
#endif
|
||||||
case NFT_METADATA_KEY_1:
|
case PROD_NFT_METADATA_KEY:
|
||||||
rawKey = (uint8_t *) LEDGER_NFT_PUBLIC_KEY;
|
rawKey = (uint8_t *) LEDGER_NFT_METADATA_PUBLIC_KEY;
|
||||||
rawKeyLen = sizeof(LEDGER_NFT_PUBLIC_KEY);
|
rawKeyLen = sizeof(LEDGER_NFT_METADATA_PUBLIC_KEY);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PRINTF("KeyID %d not supported\n", keyId);
|
PRINTF("KeyID %d not supported\n", keyId);
|
||||||
@@ -210,10 +222,9 @@ void handleProvideNFTInformation(uint8_t p1,
|
|||||||
THROW(0x6A80);
|
THROW(0x6A80);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// Set this to `NOT_OLD_INTERNAL` because otherwise the tx might be treated as an
|
|
||||||
// internal plugin and we might get a collision and hence some BIG problems.
|
|
||||||
pluginType = NOT_OLD_INTERNAL;
|
|
||||||
|
|
||||||
tmpCtx.transactionContext.tokenSet[tmpCtx.transactionContext.currentItemIndex] = 1;
|
tmpCtx.transactionContext.tokenSet[tmpCtx.transactionContext.currentItemIndex] = 1;
|
||||||
THROW(0x9000);
|
THROW(0x9000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "tokens.h"
|
#include "tokens.h"
|
||||||
#include "eth_plugin_interface.h"
|
#include "eth_plugin_interface.h"
|
||||||
#include "eth_plugin_internal.h"
|
#include "eth_plugin_internal.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
// Supported internal plugins
|
// Supported internal plugins
|
||||||
#define ERC721_STR "ERC721"
|
#define ERC721_STR "ERC721"
|
||||||
@@ -31,10 +32,9 @@ typedef enum Version {
|
|||||||
} Version;
|
} Version;
|
||||||
|
|
||||||
typedef enum KeyId {
|
typedef enum KeyId {
|
||||||
TEST_KEY = 0x00,
|
TEST_PLUGIN_KEY = 0x00,
|
||||||
PERSO_V2_KEY_1 = 0x01,
|
|
||||||
// Must ONLY be used with ERC721 and ERC1155 plugin
|
// Must ONLY be used with ERC721 and ERC1155 plugin
|
||||||
AWS_PLUGIN_KEY_1 = 0x02,
|
PROD_PLUGIN_KEY = 0x02,
|
||||||
} KeyId;
|
} KeyId;
|
||||||
|
|
||||||
// Algorithm Id consists of a Key spec and an algorithm spec.
|
// Algorithm Id consists of a Key spec and an algorithm spec.
|
||||||
@@ -43,18 +43,22 @@ typedef enum AlgorithmID {
|
|||||||
ECC_SECG_P256K1__ECDSA_SHA_256 = 0x01,
|
ECC_SECG_P256K1__ECDSA_SHA_256 = 0x01,
|
||||||
} AlgorithmID;
|
} AlgorithmID;
|
||||||
|
|
||||||
|
// Only used for signing NFT plugins (ERC721 and ERC1155)
|
||||||
|
static const uint8_t LEDGER_NFT_SELECTOR_PUBLIC_KEY[] = {
|
||||||
#ifdef HAVE_NFT_TESTING_KEY
|
#ifdef HAVE_NFT_TESTING_KEY
|
||||||
static const uint8_t LEDGER_TESTING_KEY[] = {
|
|
||||||
0x04, 0xf5, 0x70, 0x0c, 0xa1, 0xe8, 0x74, 0x24, 0xc7, 0xc7, 0xd1, 0x19, 0xe7,
|
0x04, 0xf5, 0x70, 0x0c, 0xa1, 0xe8, 0x74, 0x24, 0xc7, 0xc7, 0xd1, 0x19, 0xe7,
|
||||||
0xe3, 0xc1, 0x89, 0xb1, 0x62, 0x50, 0x94, 0xdb, 0x6e, 0xa0, 0x40, 0x87, 0xc8,
|
0xe3, 0xc1, 0x89, 0xb1, 0x62, 0x50, 0x94, 0xdb, 0x6e, 0xa0, 0x40, 0x87, 0xc8,
|
||||||
0x30, 0x00, 0x7d, 0x0b, 0x46, 0x9a, 0x53, 0x11, 0xee, 0x6a, 0x1a, 0xcd, 0x1d,
|
0x30, 0x00, 0x7d, 0x0b, 0x46, 0x9a, 0x53, 0x11, 0xee, 0x6a, 0x1a, 0xcd, 0x1d,
|
||||||
0xa5, 0xaa, 0xb0, 0xf5, 0xc6, 0xdf, 0x13, 0x15, 0x8d, 0x28, 0xcc, 0x12, 0xd1,
|
0xa5, 0xaa, 0xb0, 0xf5, 0xc6, 0xdf, 0x13, 0x15, 0x8d, 0x28, 0xcc, 0x12, 0xd1,
|
||||||
0xdd, 0xa6, 0xec, 0xe9, 0x46, 0xb8, 0x9d, 0x5c, 0x05, 0x49, 0x92, 0x59, 0xc4};
|
0xdd, 0xa6, 0xec, 0xe9, 0x46, 0xb8, 0x9d, 0x5c, 0x05, 0x49, 0x92, 0x59, 0xc4
|
||||||
|
#else
|
||||||
|
0x04, 0xd8, 0x62, 0x6e, 0x01, 0x9e, 0x55, 0x3e, 0x19, 0x69, 0x56, 0xf1, 0x17,
|
||||||
|
0x4d, 0xcd, 0xb8, 0x9a, 0x1c, 0xda, 0xc4, 0x93, 0x90, 0x08, 0xbc, 0x79, 0x77,
|
||||||
|
0x33, 0x6d, 0x78, 0x24, 0xee, 0xe3, 0xa2, 0x62, 0x24, 0x1a, 0x62, 0x73, 0x52,
|
||||||
|
0x3b, 0x09, 0xb8, 0xd0, 0xce, 0x0d, 0x39, 0xe8, 0x60, 0xc9, 0x4d, 0x02, 0x53,
|
||||||
|
0x58, 0xdb, 0xdc, 0x25, 0x92, 0xc7, 0xc6, 0x48, 0x0d, 0x39, 0xce, 0xbb, 0xa3
|
||||||
#endif
|
#endif
|
||||||
static const uint8_t LEDGER_PERSO_V2_PUBLIC_KEY[] = {};
|
};
|
||||||
|
|
||||||
// Only used for signing NFT plugins (ERC721 and ERC1155)
|
|
||||||
static const uint8_t LEDGER_NFT_SELECTOR_PUBLIC_KEY[] = {};
|
|
||||||
|
|
||||||
// Verification function used to verify the signature
|
// Verification function used to verify the signature
|
||||||
typedef bool verificationAlgo(const cx_ecfp_public_key_t *,
|
typedef bool verificationAlgo(const cx_ecfp_public_key_t *,
|
||||||
@@ -164,9 +168,14 @@ void handleSetPlugin(uint8_t p1,
|
|||||||
PRINTF("Selector: %.*H\n", SELECTOR_SIZE, tokenContext->methodSelector);
|
PRINTF("Selector: %.*H\n", SELECTOR_SIZE, tokenContext->methodSelector);
|
||||||
offset += SELECTOR_SIZE;
|
offset += SELECTOR_SIZE;
|
||||||
|
|
||||||
// TODO: store chainID and assert that tx is using the same chainid.
|
uint64_t chainId = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE);
|
||||||
// uint64_t chainid = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE);
|
// this prints raw data, so to have a more meaningful print, display
|
||||||
// PRINTF("ChainID: %.*H\n", sizeof(chainid), &chainid);
|
// the buffer before the endianness swap
|
||||||
|
PRINTF("ChainID: %.*H\n", sizeof(chainId), (workBuffer + offset));
|
||||||
|
if ((chainConfig->chainId != 0) && (chainConfig->chainId != chainId)) {
|
||||||
|
PRINTF("Chain ID token mismatch\n");
|
||||||
|
THROW(0x6A80);
|
||||||
|
}
|
||||||
offset += CHAIN_ID_SIZE;
|
offset += CHAIN_ID_SIZE;
|
||||||
|
|
||||||
enum KeyId keyId = workBuffer[offset];
|
enum KeyId keyId = workBuffer[offset];
|
||||||
@@ -176,16 +185,9 @@ void handleSetPlugin(uint8_t p1,
|
|||||||
PRINTF("KeyID: %d\n", keyId);
|
PRINTF("KeyID: %d\n", keyId);
|
||||||
switch (keyId) {
|
switch (keyId) {
|
||||||
#ifdef HAVE_NFT_TESTING_KEY
|
#ifdef HAVE_NFT_TESTING_KEY
|
||||||
case TEST_KEY:
|
case TEST_PLUGIN_KEY:
|
||||||
rawKey = LEDGER_TESTING_KEY;
|
|
||||||
rawKeyLen = sizeof(LEDGER_TESTING_KEY);
|
|
||||||
break;
|
|
||||||
#endif
|
#endif
|
||||||
case PERSO_V2_KEY_1:
|
case PROD_PLUGIN_KEY:
|
||||||
rawKey = LEDGER_PERSO_V2_PUBLIC_KEY;
|
|
||||||
rawKeyLen = sizeof(LEDGER_PERSO_V2_PUBLIC_KEY);
|
|
||||||
break;
|
|
||||||
case AWS_PLUGIN_KEY_1:
|
|
||||||
rawKey = LEDGER_NFT_SELECTOR_PUBLIC_KEY;
|
rawKey = LEDGER_NFT_SELECTOR_PUBLIC_KEY;
|
||||||
rawKeyLen = sizeof(LEDGER_NFT_SELECTOR_PUBLIC_KEY);
|
rawKeyLen = sizeof(LEDGER_NFT_SELECTOR_PUBLIC_KEY);
|
||||||
break;
|
break;
|
||||||
@@ -255,7 +257,7 @@ void handleSetPlugin(uint8_t p1,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pluginType = getPluginType(tokenContext->pluginName, pluginNameLength);
|
pluginType = getPluginType(tokenContext->pluginName, pluginNameLength);
|
||||||
if (keyId == AWS_PLUGIN_KEY_1) {
|
if (keyId == PROD_PLUGIN_KEY) {
|
||||||
if (pluginType != ERC721 && pluginType != ERC1155) {
|
if (pluginType != ERC721 && pluginType != ERC1155) {
|
||||||
PRINTF("AWS key must only be used to set NFT internal plugins\n");
|
PRINTF("AWS key must only be used to set NFT internal plugins\n");
|
||||||
THROW(0x6A80);
|
THROW(0x6A80);
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ void handleSign(uint8_t p1,
|
|||||||
UNUSED(tx);
|
UNUSED(tx);
|
||||||
parserStatus_e txResult;
|
parserStatus_e txResult;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
if (os_global_pin_is_validated() != BOLOS_UX_OK) {
|
||||||
|
PRINTF("Device is PIN-locked");
|
||||||
|
THROW(0x6982);
|
||||||
|
}
|
||||||
if (p1 == P1_FIRST) {
|
if (p1 == P1_FIRST) {
|
||||||
if (dataLength < 1) {
|
if (dataLength < 1) {
|
||||||
PRINTF("Invalid data\n");
|
PRINTF("Invalid data\n");
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#include "erc1155_plugin.h"
|
#include "erc1155_plugin.h"
|
||||||
#include "eth_plugin_internal.h"
|
#include "eth_plugin_internal.h"
|
||||||
|
|
||||||
static const uint8_t ERC1155_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65};
|
static const uint8_t ERC1155_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65};
|
||||||
static const uint8_t ERC1155_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0xf2, 0x42, 0x43, 0x2a};
|
static const uint8_t ERC1155_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0xf2, 0x42, 0x43, 0x2a};
|
||||||
static const uint8_t ERC1155_SAFE_BATCH_TRANSFER[SELECTOR_SIZE] = {0xf2, 0x42, 0x43, 0x2a};
|
static const uint8_t ERC1155_SAFE_BATCH_TRANSFER[SELECTOR_SIZE] = {0x2e, 0xb2, 0xc2, 0xd6};
|
||||||
|
|
||||||
const uint8_t *const ERC1155_SELECTORS[NUM_ERC1155_SELECTORS] = {
|
const uint8_t *const ERC1155_SELECTORS[NUM_ERC1155_SELECTORS] = {
|
||||||
ERC1155_APPROVE_FOR_ALL_SELECTOR,
|
ERC1155_APPROVE_FOR_ALL_SELECTOR,
|
||||||
@@ -59,11 +61,11 @@ static void handle_finalize(void *parameters) {
|
|||||||
msg->tokenLookup2 = NULL;
|
msg->tokenLookup2 = NULL;
|
||||||
switch (context->selectorIndex) {
|
switch (context->selectorIndex) {
|
||||||
case SAFE_TRANSFER:
|
case SAFE_TRANSFER:
|
||||||
msg->numScreens = 4;
|
msg->numScreens = 5;
|
||||||
break;
|
break;
|
||||||
case SET_APPROVAL_FOR_ALL:
|
case SET_APPROVAL_FOR_ALL:
|
||||||
case SAFE_BATCH_TRANSFER:
|
case SAFE_BATCH_TRANSFER:
|
||||||
msg->numScreens = 3;
|
msg->numScreens = 4;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
||||||
@@ -99,9 +101,11 @@ static void handle_query_contract_id(void *parameters) {
|
|||||||
strlcpy(msg->version, "Allowance", msg->versionLength);
|
strlcpy(msg->version, "Allowance", msg->versionLength);
|
||||||
break;
|
break;
|
||||||
case SAFE_TRANSFER:
|
case SAFE_TRANSFER:
|
||||||
case SAFE_BATCH_TRANSFER:
|
|
||||||
strlcpy(msg->version, "Transfer", msg->versionLength);
|
strlcpy(msg->version, "Transfer", msg->versionLength);
|
||||||
break;
|
break;
|
||||||
|
case SAFE_BATCH_TRANSFER:
|
||||||
|
strlcpy(msg->version, "Batch Transfer", msg->versionLength);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
PRINTF("Unsupported selector %d\n", context->selectorIndex);
|
PRINTF("Unsupported selector %d\n", context->selectorIndex);
|
||||||
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
||||||
@@ -134,3 +138,5 @@ void erc1155_plugin_call(int message, void *parameters) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -5,6 +7,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "ethUtils.h"
|
#include "ethUtils.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "uint256.h"
|
||||||
|
|
||||||
// Internal plugin for EIP 1155: https://eips.ethereum.org/EIPS/eip-1155
|
// Internal plugin for EIP 1155: https://eips.ethereum.org/EIPS/eip-1155
|
||||||
|
|
||||||
@@ -31,19 +34,22 @@ typedef enum {
|
|||||||
} erc1155_selector_field;
|
} erc1155_selector_field;
|
||||||
|
|
||||||
typedef struct erc1155_context_t {
|
typedef struct erc1155_context_t {
|
||||||
uint8_t address[ADDRESS_LENGTH];
|
uint8_t address[ADDRESS_LENGTH];
|
||||||
uint8_t tokenId[INT256_LENGTH];
|
uint8_t tokenId[INT256_LENGTH];
|
||||||
uint8_t value[INT256_LENGTH];
|
uint256_t value;
|
||||||
|
|
||||||
uint32_t valueOffset;
|
uint16_t ids_array_len;
|
||||||
uint32_t tokenIdsOffset;
|
uint32_t ids_offset;
|
||||||
uint32_t targetOffset;
|
uint16_t values_array_len;
|
||||||
|
uint32_t values_offset;
|
||||||
|
uint16_t array_index;
|
||||||
|
|
||||||
bool approved;
|
bool approved;
|
||||||
erc1155_selector_field next_param;
|
erc1155_selector_field next_param;
|
||||||
uint8_t selectorIndex;
|
uint8_t selectorIndex;
|
||||||
} erc1155_context_t;
|
} erc1155_context_t;
|
||||||
|
|
||||||
// TODO: Find out why there is a duplicate if we remove 1155 suffix
|
|
||||||
void handle_provide_parameter_1155(void *parameters);
|
void handle_provide_parameter_1155(void *parameters);
|
||||||
void handle_query_contract_ui_1155(void *parameters);
|
void handle_query_contract_ui_1155(void *parameters);
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#include "erc1155_plugin.h"
|
#include "erc1155_plugin.h"
|
||||||
#include "eth_plugin_internal.h"
|
#include "eth_plugin_internal.h"
|
||||||
|
|
||||||
static void handle_safe_transfer(ethPluginProvideParameter_t *msg, erc1155_context_t *context) {
|
static void handle_safe_transfer(ethPluginProvideParameter_t *msg, erc1155_context_t *context) {
|
||||||
|
uint8_t new_value[INT256_LENGTH];
|
||||||
|
|
||||||
switch (context->next_param) {
|
switch (context->next_param) {
|
||||||
case FROM:
|
case FROM:
|
||||||
context->next_param = TO;
|
context->next_param = TO;
|
||||||
@@ -15,7 +19,8 @@ static void handle_safe_transfer(ethPluginProvideParameter_t *msg, erc1155_conte
|
|||||||
context->next_param = VALUE;
|
context->next_param = VALUE;
|
||||||
break;
|
break;
|
||||||
case VALUE:
|
case VALUE:
|
||||||
copy_parameter(context->value, msg->parameter, sizeof(context->value));
|
copy_parameter(new_value, msg->parameter, sizeof(new_value));
|
||||||
|
convertUint256BE(new_value, INT256_LENGTH, &context->value);
|
||||||
context->next_param = NONE;
|
context->next_param = NONE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -25,31 +30,74 @@ static void handle_safe_transfer(ethPluginProvideParameter_t *msg, erc1155_conte
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void handle_batch_transfer(ethPluginProvideParameter_t *msg, erc1155_context_t *context) {
|
static void handle_batch_transfer(ethPluginProvideParameter_t *msg, erc1155_context_t *context) {
|
||||||
|
uint256_t new_value;
|
||||||
|
|
||||||
switch (context->next_param) {
|
switch (context->next_param) {
|
||||||
case FROM:
|
case FROM:
|
||||||
context->next_param = TO;
|
context->next_param = TO;
|
||||||
break;
|
break;
|
||||||
case TO:
|
case TO:
|
||||||
copy_address(context->address, msg->parameter, sizeof(context->address));
|
copy_address(context->address, msg->parameter, sizeof(context->address));
|
||||||
context->next_param = TOKEN_ID;
|
context->next_param = TOKEN_IDS_OFFSET;
|
||||||
break;
|
break;
|
||||||
case TOKEN_IDS_OFFSET:
|
case TOKEN_IDS_OFFSET:
|
||||||
context->tokenIdsOffset = U4BE(msg->parameter, PARAMETER_LENGTH - 4);
|
context->ids_offset = \
|
||||||
|
U4BE(msg->parameter,
|
||||||
|
PARAMETER_LENGTH - sizeof(context->ids_offset)) + 4;
|
||||||
context->next_param = VALUE_OFFSET;
|
context->next_param = VALUE_OFFSET;
|
||||||
break;
|
break;
|
||||||
case VALUE_OFFSET:
|
case VALUE_OFFSET:
|
||||||
context->targetOffset = context->tokenIdsOffset;
|
context->values_offset = \
|
||||||
context->next_param = TOKEN_ID;
|
U4BE(msg->parameter,
|
||||||
|
PARAMETER_LENGTH - sizeof(context->values_offset)) + 4;
|
||||||
|
context->next_param = TOKEN_IDS_LENGTH;
|
||||||
|
break;
|
||||||
|
case TOKEN_IDS_LENGTH:
|
||||||
|
if ((msg->parameterOffset + PARAMETER_LENGTH) > context->ids_offset)
|
||||||
|
{
|
||||||
|
context->ids_array_len = \
|
||||||
|
U2BE(msg->parameter,
|
||||||
|
PARAMETER_LENGTH - sizeof(context->ids_array_len));
|
||||||
|
context->next_param = TOKEN_ID;
|
||||||
|
// set to zero for next step
|
||||||
|
context->array_index = 0;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case TOKEN_ID:
|
case TOKEN_ID:
|
||||||
copy_parameter(context->tokenId, msg->parameter, sizeof(context->tokenId));
|
// don't copy anything since we won't display it
|
||||||
context->targetOffset = context->valueOffset;
|
if (--context->ids_array_len == 0)
|
||||||
context->next_param = VALUE;
|
{
|
||||||
|
context->next_param = VALUE_LENGTH;
|
||||||
|
}
|
||||||
|
context->array_index++;
|
||||||
|
break;
|
||||||
|
case VALUE_LENGTH:
|
||||||
|
if ((msg->parameterOffset + PARAMETER_LENGTH) > context->values_offset)
|
||||||
|
{
|
||||||
|
context->values_array_len = \
|
||||||
|
U2BE(msg->parameter,
|
||||||
|
PARAMETER_LENGTH - sizeof(context->values_array_len));
|
||||||
|
if (context->values_array_len != context->array_index)
|
||||||
|
{
|
||||||
|
PRINTF("Token ids and values array sizes mismatch!");
|
||||||
|
}
|
||||||
|
context->next_param = VALUE;
|
||||||
|
// set to zero for next step
|
||||||
|
context->array_index = 0;
|
||||||
|
explicit_bzero(&context->value, sizeof(context->value));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case VALUE:
|
case VALUE:
|
||||||
copy_parameter(context->value, msg->parameter, sizeof(context->value));
|
// put it temporarily in token id since we don't use it in batch transfer
|
||||||
context->targetOffset = 0;
|
copy_parameter(context->tokenId, msg->parameter, sizeof(context->value));
|
||||||
context->next_param = NONE;
|
convertUint256BE(context->tokenId, sizeof(context->tokenId), &new_value);
|
||||||
|
add256(&context->value, &new_value, &context->value);
|
||||||
|
if (--context->values_array_len == 0)
|
||||||
|
{
|
||||||
|
context->next_param = NONE;
|
||||||
|
}
|
||||||
|
context->array_index++;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// Some extra data might be present so don't error.
|
// Some extra data might be present so don't error.
|
||||||
break;
|
break;
|
||||||
@@ -84,10 +132,10 @@ void handle_provide_parameter_1155(void *parameters) {
|
|||||||
|
|
||||||
msg->result = ETH_PLUGIN_RESULT_SUCCESSFUL;
|
msg->result = ETH_PLUGIN_RESULT_SUCCESSFUL;
|
||||||
|
|
||||||
if (context->targetOffset > SELECTOR_SIZE &&
|
//if (context->targetOffset > SELECTOR_SIZE &&
|
||||||
context->targetOffset != msg->parameterOffset - SELECTOR_SIZE) {
|
// context->targetOffset != msg->parameterOffset - SELECTOR_SIZE) {
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
switch (context->selectorIndex) {
|
switch (context->selectorIndex) {
|
||||||
case SAFE_TRANSFER:
|
case SAFE_TRANSFER:
|
||||||
handle_safe_transfer(msg, context);
|
handle_safe_transfer(msg, context);
|
||||||
@@ -103,4 +151,6 @@ void handle_provide_parameter_1155(void *parameters) {
|
|||||||
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#include "erc1155_plugin.h"
|
#include "erc1155_plugin.h"
|
||||||
|
|
||||||
static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) {
|
static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) {
|
||||||
@@ -40,20 +42,6 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t
|
|||||||
static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) {
|
static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) {
|
||||||
switch (msg->screenIndex) {
|
switch (msg->screenIndex) {
|
||||||
case 0:
|
case 0:
|
||||||
// What will be displayed on the screen is:
|
|
||||||
// | Send |
|
|
||||||
// | `X` `COLLECTION_NAME` |
|
|
||||||
// where `X` is `value`
|
|
||||||
strlcpy(msg->title, "Send", msg->titleLength);
|
|
||||||
uint256_to_decimal(context->value, sizeof(context->value), msg->msg, msg->msgLength);
|
|
||||||
strlcat(msg->msg, " ", msg->msgLength);
|
|
||||||
if (msg->item1) {
|
|
||||||
strlcat(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength);
|
|
||||||
} else {
|
|
||||||
strlcat(msg->msg, "Items", msg->msgLength);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
strlcpy(msg->title, "To", msg->titleLength);
|
strlcpy(msg->title, "To", msg->titleLength);
|
||||||
getEthDisplayableAddress(context->address,
|
getEthDisplayableAddress(context->address,
|
||||||
msg->msg,
|
msg->msg,
|
||||||
@@ -61,9 +49,17 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex
|
|||||||
&global_sha3,
|
&global_sha3,
|
||||||
chainConfig->chainId);
|
chainConfig->chainId);
|
||||||
break;
|
break;
|
||||||
|
case 1:
|
||||||
|
strlcpy(msg->title, "Collection Name", msg->titleLength);
|
||||||
|
if (msg->item1) {
|
||||||
|
strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength);
|
||||||
|
} else {
|
||||||
|
strlcpy(msg->msg, "Not Found", msg->msgLength);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
strlcpy(msg->title, "NFT Address", msg->titleLength);
|
strlcpy(msg->title, "NFT Address", msg->titleLength);
|
||||||
getEthDisplayableAddress(msg->pluginSharedRO->txContent->destination,
|
getEthDisplayableAddress((uint8_t *)msg->item1->nft.contractAddress,
|
||||||
msg->msg,
|
msg->msg,
|
||||||
msg->msgLength,
|
msg->msgLength,
|
||||||
&global_sha3,
|
&global_sha3,
|
||||||
@@ -76,6 +72,10 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex
|
|||||||
msg->msg,
|
msg->msg,
|
||||||
msg->msgLength);
|
msg->msgLength);
|
||||||
break;
|
break;
|
||||||
|
case 4:
|
||||||
|
strlcpy(msg->title, "Quantity", msg->titleLength);
|
||||||
|
tostring256(&context->value, 10, msg->msg, msg->msgLength);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
PRINTF("Unsupported screen index %d\n", msg->screenIndex);
|
PRINTF("Unsupported screen index %d\n", msg->screenIndex);
|
||||||
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
||||||
@@ -84,27 +84,42 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) {
|
static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) {
|
||||||
|
char quantity_str[48];
|
||||||
|
|
||||||
switch (msg->screenIndex) {
|
switch (msg->screenIndex) {
|
||||||
case 0:
|
case 0:
|
||||||
strlcpy(msg->title, "Send NFTs From", msg->titleLength);
|
|
||||||
uint256_to_decimal(context->value, sizeof(context->value), msg->msg, msg->msgLength);
|
|
||||||
strlcat(msg->msg, " Different Collections", msg->msgLength);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
strlcpy(msg->title, "To", msg->titleLength);
|
strlcpy(msg->title, "To", msg->titleLength);
|
||||||
getEthDisplayableAddress(context->address,
|
getEthDisplayableAddress(context->address,
|
||||||
msg->msg,
|
msg->msg,
|
||||||
msg->msgLength,
|
msg->msgLength,
|
||||||
&global_sha3,
|
&global_sha3,
|
||||||
chainConfig->chainId);
|
chainConfig->chainId);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
strlcpy(msg->title, "Collection Name", msg->titleLength);
|
||||||
|
if (msg->item1) {
|
||||||
|
strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength);
|
||||||
|
} else {
|
||||||
|
strlcpy(msg->msg, "Not Found", msg->msgLength);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
strlcpy(msg->title, "NFT Address", msg->titleLength);
|
strlcpy(msg->title, "NFT Address", msg->titleLength);
|
||||||
getEthDisplayableAddress(msg->pluginSharedRO->txContent->destination,
|
getEthDisplayableAddress((uint8_t *)msg->item1->nft.contractAddress,
|
||||||
msg->msg,
|
msg->msg,
|
||||||
msg->msgLength,
|
msg->msgLength,
|
||||||
&global_sha3,
|
&global_sha3,
|
||||||
chainConfig->chainId);
|
chainConfig->chainId);
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
strlcpy(msg->title, "Total Quantity", msg->titleLength);
|
||||||
|
tostring256(&context->value, 10, &quantity_str[0], sizeof(quantity_str));
|
||||||
|
snprintf(msg->msg,
|
||||||
|
msg->msgLength,
|
||||||
|
"%s from %d NFT IDs",
|
||||||
|
quantity_str,
|
||||||
|
context->array_index);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
PRINTF("Unsupported screen index %d\n", msg->screenIndex);
|
PRINTF("Unsupported screen index %d\n", msg->screenIndex);
|
||||||
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
||||||
@@ -132,4 +147,6 @@ void handle_query_contract_ui_1155(void *parameters) {
|
|||||||
PRINTF("Unsupported selector index %d\n", context->selectorIndex);
|
PRINTF("Unsupported selector index %d\n", context->selectorIndex);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#include "erc721_plugin.h"
|
#include "erc721_plugin.h"
|
||||||
#include "eth_plugin_internal.h"
|
#include "eth_plugin_internal.h"
|
||||||
|
|
||||||
static const uint8_t ERC721_APPROVE_SELECTOR[SELECTOR_SIZE] = {0x13, 0x37, 0x42, 0x42};
|
static const uint8_t ERC721_APPROVE_SELECTOR[SELECTOR_SIZE] = {0x09, 0x5e, 0xa7, 0xb3};
|
||||||
static const uint8_t ERC721_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65};
|
static const uint8_t ERC721_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65};
|
||||||
static const uint8_t ERC721_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0x23, 0xb8, 0x72, 0xdd};
|
static const uint8_t ERC721_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0x23, 0xb8, 0x72, 0xdd};
|
||||||
static const uint8_t ERC721_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0x42, 0x84, 0x2e, 0x0e};
|
static const uint8_t ERC721_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0x42, 0x84, 0x2e, 0x0e};
|
||||||
static const uint8_t ERC721_SAFE_TRANSFER_DATA_SELECTOR[SELECTOR_SIZE] = {0xf2, 0x42, 0x43, 0x2a};
|
static const uint8_t ERC721_SAFE_TRANSFER_DATA_SELECTOR[SELECTOR_SIZE] = {0xb8, 0x8d, 0x4f, 0xde};
|
||||||
|
|
||||||
const uint8_t *const ERC721_SELECTORS[NUM_ERC721_SELECTORS] = {
|
const uint8_t *const ERC721_SELECTORS[NUM_ERC721_SELECTORS] = {
|
||||||
ERC721_APPROVE_SELECTOR,
|
ERC721_APPROVE_SELECTOR,
|
||||||
@@ -62,12 +64,12 @@ static void handle_finalize(void *parameters) {
|
|||||||
case TRANSFER:
|
case TRANSFER:
|
||||||
case SAFE_TRANSFER:
|
case SAFE_TRANSFER:
|
||||||
case SAFE_TRANSFER_DATA:
|
case SAFE_TRANSFER_DATA:
|
||||||
case SET_APPROVAL_FOR_ALL:
|
|
||||||
msg->numScreens = 3;
|
|
||||||
break;
|
|
||||||
case APPROVE:
|
case APPROVE:
|
||||||
msg->numScreens = 4;
|
msg->numScreens = 4;
|
||||||
break;
|
break;
|
||||||
|
case SET_APPROVAL_FOR_ALL:
|
||||||
|
msg->numScreens = 3;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
||||||
return;
|
return;
|
||||||
@@ -125,7 +127,7 @@ void erc721_plugin_call(int message, void *parameters) {
|
|||||||
handle_init_contract(parameters);
|
handle_init_contract(parameters);
|
||||||
} break;
|
} break;
|
||||||
case ETH_PLUGIN_PROVIDE_PARAMETER: {
|
case ETH_PLUGIN_PROVIDE_PARAMETER: {
|
||||||
handle_provide_parameter(parameters);
|
handle_provide_parameter_721(parameters);
|
||||||
} break;
|
} break;
|
||||||
case ETH_PLUGIN_FINALIZE: {
|
case ETH_PLUGIN_FINALIZE: {
|
||||||
handle_finalize(parameters);
|
handle_finalize(parameters);
|
||||||
@@ -137,10 +139,12 @@ void erc721_plugin_call(int message, void *parameters) {
|
|||||||
handle_query_contract_id(parameters);
|
handle_query_contract_id(parameters);
|
||||||
} break;
|
} break;
|
||||||
case ETH_PLUGIN_QUERY_CONTRACT_UI: {
|
case ETH_PLUGIN_QUERY_CONTRACT_UI: {
|
||||||
handle_query_contract_ui(parameters);
|
handle_query_contract_ui_721(parameters);
|
||||||
} break;
|
} break;
|
||||||
default:
|
default:
|
||||||
PRINTF("Unhandled message %d\n", message);
|
PRINTF("Unhandled message %d\n", message);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -38,5 +40,7 @@ typedef struct erc721_context_t {
|
|||||||
uint8_t selectorIndex;
|
uint8_t selectorIndex;
|
||||||
} erc721_context_t;
|
} erc721_context_t;
|
||||||
|
|
||||||
void handle_provide_parameter(void *parameters);
|
void handle_provide_parameter_721(void *parameters);
|
||||||
void handle_query_contract_ui(void *parameters);
|
void handle_query_contract_ui_721(void *parameters);
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#include "erc721_plugin.h"
|
#include "erc721_plugin.h"
|
||||||
#include "eth_plugin_internal.h"
|
#include "eth_plugin_internal.h"
|
||||||
|
|
||||||
@@ -60,7 +62,7 @@ static void handle_approval_for_all(ethPluginProvideParameter_t *msg, erc721_con
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_provide_parameter(void *parameters) {
|
void handle_provide_parameter_721(void *parameters) {
|
||||||
ethPluginProvideParameter_t *msg = (ethPluginProvideParameter_t *) parameters;
|
ethPluginProvideParameter_t *msg = (ethPluginProvideParameter_t *) parameters;
|
||||||
erc721_context_t *context = (erc721_context_t *) msg->pluginContext;
|
erc721_context_t *context = (erc721_context_t *) msg->pluginContext;
|
||||||
|
|
||||||
@@ -90,4 +92,6 @@ void handle_provide_parameter(void *parameters) {
|
|||||||
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
msg->result = ETH_PLUGIN_RESULT_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#ifdef HAVE_NFT_SUPPORT
|
||||||
|
|
||||||
#include "erc721_plugin.h"
|
#include "erc721_plugin.h"
|
||||||
|
|
||||||
static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context) {
|
static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context) {
|
||||||
@@ -113,7 +115,7 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
strlcpy(msg->title, "NFT Address", msg->titleLength);
|
strlcpy(msg->title, "NFT Address", msg->titleLength);
|
||||||
getEthDisplayableAddress(msg->pluginSharedRO->txContent->destination,
|
getEthDisplayableAddress((uint8_t *)msg->item1->nft.contractAddress,
|
||||||
msg->msg,
|
msg->msg,
|
||||||
msg->msgLength,
|
msg->msgLength,
|
||||||
&global_sha3,
|
&global_sha3,
|
||||||
@@ -141,7 +143,7 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_query_contract_ui(void *parameters) {
|
void handle_query_contract_ui_721(void *parameters) {
|
||||||
ethQueryContractUI_t *msg = (ethQueryContractUI_t *) parameters;
|
ethQueryContractUI_t *msg = (ethQueryContractUI_t *) parameters;
|
||||||
erc721_context_t *context = (erc721_context_t *) msg->pluginContext;
|
erc721_context_t *context = (erc721_context_t *) msg->pluginContext;
|
||||||
|
|
||||||
@@ -163,4 +165,6 @@ void handle_query_contract_ui(void *parameters) {
|
|||||||
PRINTF("Unsupported selector index %d\n", context->selectorIndex);
|
PRINTF("Unsupported selector index %d\n", context->selectorIndex);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_NFT_SUPPORT
|
||||||
|
|||||||
@@ -1,34 +1,44 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
TESTS_FULL_PATH=$(dirname "$(realpath "$0")")
|
||||||
|
|
||||||
# FILL THESE WITH YOUR OWN SDKs PATHS
|
# FILL THESE WITH YOUR OWN SDKs PATHS
|
||||||
NANOS_SDK=$TWO
|
# NANOS_SDK=
|
||||||
NANOX_SDK=$X
|
# NANOX_SDK=
|
||||||
|
|
||||||
# list of apps required by tests that we want to build here
|
# list of apps required by tests that we want to build here
|
||||||
appnames=("ethereum")
|
APPS=("ethereum" "ethereum_classic")
|
||||||
|
|
||||||
# create elfs folder if it doesn't exist
|
# list of SDKS
|
||||||
|
NANO_SDKS=("$NANOS_SDK" "$NANOX_SDK")
|
||||||
|
# list of target elf file name suffix
|
||||||
|
FILE_SUFFIXES=("nanos" "nanox")
|
||||||
|
|
||||||
|
# move to the tests directory
|
||||||
|
cd "$TESTS_FULL_PATH" || exit 1
|
||||||
|
|
||||||
|
# Do it only now since before the cd command, we might not have been inside the repository
|
||||||
|
GIT_REPO_ROOT=$(git rev-parse --show-toplevel)
|
||||||
|
TESTS_REL_PATH=$(realpath --relative-to="$GIT_REPO_ROOT" "$TESTS_FULL_PATH")
|
||||||
|
|
||||||
|
# create elfs directory if it doesn't exist
|
||||||
mkdir -p elfs
|
mkdir -p elfs
|
||||||
|
|
||||||
# move to repo's root to build apps
|
# move to repo's root to build apps
|
||||||
cd ..
|
cd "$GIT_REPO_ROOT" || exit 1
|
||||||
|
|
||||||
echo "*Building elfs for Nano S..."
|
for ((sdk_idx=0; sdk_idx < "${#NANO_SDKS[@]}"; sdk_idx++))
|
||||||
for app in "${appnames[@]}"
|
|
||||||
do
|
do
|
||||||
echo "**Building $app for Nano S..."
|
nano_sdk="${NANO_SDKS[$sdk_idx]}"
|
||||||
make clean BOLOS_SDK=$NANOS_SDK
|
elf_suffix="${FILE_SUFFIXES[$sdk_idx]}"
|
||||||
make -j ALLOW_DATA=1 NFT_TESTING_KEY=1 DEBUG=1 BOLOS_SDK=$NANOS_SDK CHAIN=$app
|
echo "* Building elfs for $(basename "$nano_sdk")..."
|
||||||
cp bin/app.elf "tests/elfs/${app}_nanos.elf"
|
for appname in "${APPS[@]}"
|
||||||
|
do
|
||||||
|
echo "** Building app $appname..."
|
||||||
|
make clean BOLOS_SDK="$nano_sdk"
|
||||||
|
make -j DEBUG=1 NFT_TESTING_KEY=1 BOLOS_SDK="$nano_sdk" CHAIN="$appname"
|
||||||
|
cp bin/app.elf "$TESTS_REL_PATH/elfs/${appname}_${elf_suffix}.elf"
|
||||||
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
# echo "*Building elfs for Nano X..."
|
|
||||||
# for app in "${appnames[@]}"
|
|
||||||
# do
|
|
||||||
# echo "**Building $app for Nano X..."
|
|
||||||
# make clean BOLOS_SDK=$NANOX_SDK
|
|
||||||
# make -j DEBUG=1 BOLOS_SDK=$NANOX_SDK CHAIN=$app
|
|
||||||
# cp bin/app.elf "tests/elfs/${app}_nanox.elf"
|
|
||||||
# done
|
|
||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
"bip32-path": "^0.4.2",
|
"bip32-path": "^0.4.2",
|
||||||
"core-js": "^3.7.0",
|
"core-js": "^3.7.0",
|
||||||
"ethereum-tx-decoder": "^3.0.0",
|
"ethereum-tx-decoder": "^3.0.0",
|
||||||
|
"ethers": "^5.5.1",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.0.0",
|
||||||
"google-protobuf": "^3.11.0",
|
"google-protobuf": "^3.11.0",
|
||||||
"jest-serial-runner": "^1.1.0",
|
"jest-serial-runner": "^1.1.0",
|
||||||
|
|||||||
BIN
tests/snapshots/nanos_enable_blind_signing/00000.png
Normal file
|
After Width: | Height: | Size: 531 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00001.png
Normal file
|
After Width: | Height: | Size: 344 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00002.png
Normal file
|
After Width: | Height: | Size: 480 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00003.png
Normal file
|
After Width: | Height: | Size: 566 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00004.png
Normal file
|
After Width: | Height: | Size: 514 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00005.png
Normal file
|
After Width: | Height: | Size: 614 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00006.png
Normal file
|
After Width: | Height: | Size: 628 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00007.png
Normal file
|
After Width: | Height: | Size: 338 B |
BIN
tests/snapshots/nanos_enable_blind_signing/00008.png
Normal file
|
After Width: | Height: | Size: 531 B |
@@ -19,7 +19,7 @@ test('[Nano S] Approve DAI tokens', zemu("nanos", async (sim, eth) => {
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Approve DAI tokens', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Approve DAI tokens', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import "regenerator-runtime/runtime";
|
|||||||
import { waitForAppScreen, zemu } from './test.fixture';
|
import { waitForAppScreen, zemu } from './test.fixture';
|
||||||
|
|
||||||
test('[Nano S] Deposit ETH on compound, blind sign', zemu("nanos", async (sim, eth) => {
|
test('[Nano S] Deposit ETH on compound, blind sign', zemu("nanos", async (sim, eth) => {
|
||||||
|
// Enable blind-signing
|
||||||
|
await sim.navigateAndCompareSnapshots('.', 'nanos_enable_blind_signing', [-2, 0, 0, 3, 0]);
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
@@ -19,7 +21,7 @@ test('[Nano S] Deposit ETH on compound, blind sign', zemu("nanos", async (sim, e
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Deposit ETH on compound, blind sign', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Deposit ETH on compound, blind sign', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ test('[Nano S] Transfer on palm network on Ethereum', zemu("nanos", async (sim,
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Transfer on network 112233445566 on Ethereum', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Transfer on network 112233445566 on Ethereum', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
@@ -53,7 +53,7 @@ test('[Nano X] Transfer on network 112233445566 on Ethereum', zemu("nanox", asyn
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Transfer on palm network on Ethereum', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Transfer on palm network on Ethereum', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
@@ -68,4 +68,4 @@ test('[Nano X] Transfer on palm network on Ethereum', zemu("nanox", async (sim,
|
|||||||
"s": "3698e84564e58477a49f7a9cea572ef5d672a5538db08f3ee42df5eb75a1b907",
|
"s": "3698e84564e58477a49f7a9cea572ef5d672a5538db08f3ee42df5eb75a1b907",
|
||||||
"v": "0542b8613d",
|
"v": "0542b8613d",
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -6,9 +6,6 @@ import { waitForAppScreen, zemu } from './test.fixture';
|
|||||||
import Zemu from '@zondax/zemu';
|
import Zemu from '@zondax/zemu';
|
||||||
|
|
||||||
test('[Nano S] Try to blind sign with setting disabled', zemu("nanos", async (sim, eth) => {
|
test('[Nano S] Try to blind sign with setting disabled', zemu("nanos", async (sim, eth) => {
|
||||||
// disable blind signing
|
|
||||||
await sim.navigateAndCompareSnapshots('.', 'nanos_disable_blind_signing', [-2, 0, 0, 3, 0]);
|
|
||||||
|
|
||||||
// we can't use eth.signTransaction because it detects that contract data is disabled and fails early
|
// we can't use eth.signTransaction because it detects that contract data is disabled and fails early
|
||||||
let transport = await sim.getTransport();
|
let transport = await sim.getTransport();
|
||||||
let buffer = Buffer.from("058000002c8000003c800000010000000000000000f849208506fc23ac008303dc3194f650c3d88d12db855b8bf7d11be6c55a4e07dcc980a4a1712d6800000000000000000000000000000000000000000000000000000000000acbc7018080", "hex");
|
let buffer = Buffer.from("058000002c8000003c800000010000000000000000f849208506fc23ac008303dc3194f650c3d88d12db855b8bf7d11be6c55a4e07dcc980a4a1712d6800000000000000000000000000000000000000000000000000000000000acbc7018080", "hex");
|
||||||
@@ -21,7 +18,7 @@ test('[Nano S] Try to blind sign with setting disabled', zemu("nanos", async (si
|
|||||||
await sim.navigateAndCompareSnapshots('.', 'nanos_try_to_blind_sign_with_setting_disabled', [1, 0]);
|
await sim.navigateAndCompareSnapshots('.', 'nanos_try_to_blind_sign_with_setting_disabled', [1, 0]);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Try to blind sign with setting disabled', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Try to blind sign with setting disabled', zemu("nanox", async (sim, eth) => {
|
||||||
// disable blind signing
|
// disable blind signing
|
||||||
await sim.navigateAndCompareSnapshots('.', 'nanox_disable_blind_signing', [-2, 0, 0, 3, 0]);
|
await sim.navigateAndCompareSnapshots('.', 'nanox_disable_blind_signing', [-2, 0, 0, 3, 0]);
|
||||||
|
|
||||||
@@ -35,4 +32,4 @@ test('[Nano X] Try to blind sign with setting disabled', zemu("nanox", async (si
|
|||||||
await Zemu.sleep(1000);
|
await Zemu.sleep(1000);
|
||||||
await waitForAppScreen(sim);
|
await waitForAppScreen(sim);
|
||||||
await sim.navigateAndCompareSnapshots('.', 'nanox_try_to_blind_sign_with_setting_disabled', [0]);
|
await sim.navigateAndCompareSnapshots('.', 'nanox_try_to_blind_sign_with_setting_disabled', [0]);
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ test('[Nano S] Transfer eip1559', zemu("nanos", async (sim, eth) => {
|
|||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Transfer eip1559', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Transfer eip1559', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/0'/0/0",
|
"44'/60'/0'/0/0",
|
||||||
@@ -36,4 +36,4 @@ test('[Nano X] Transfer eip1559', zemu("nanox", async (sim, eth) => {
|
|||||||
"v": "01"
|
"v": "01"
|
||||||
});
|
});
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import "core-js/stable";
|
|||||||
import "regenerator-runtime/runtime";
|
import "regenerator-runtime/runtime";
|
||||||
import { waitForAppScreen, zemu, txFromEtherscan } from './test.fixture';
|
import { waitForAppScreen, zemu, txFromEtherscan } from './test.fixture';
|
||||||
|
|
||||||
test('[Nano S] Transfer erc721', zemu("nanos", async (sim, eth) => {
|
test.skip('[Nano S] Transfer erc721', zemu("nanos", async (sim, eth) => {
|
||||||
|
|
||||||
// https://etherscan.io/tx/0x73cec4fc07de3a24ba42e8756e13b7ddfa9bd449126c37640881195e8ea9e679
|
// https://etherscan.io/tx/0x73cec4fc07de3a24ba42e8756e13b7ddfa9bd449126c37640881195e8ea9e679
|
||||||
// Modified to put a bigger token id
|
// Modified to put a bigger token id
|
||||||
@@ -24,7 +24,7 @@ test('[Nano S] Transfer erc721', zemu("nanos", async (sim, eth) => {
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano S] Transfer erc721 with attached ETH', zemu("nanos", async (sim, eth) => {
|
test.skip('[Nano S] Transfer erc721 with attached ETH', zemu("nanos", async (sim, eth) => {
|
||||||
|
|
||||||
const rawTx = "0x02f8d601058459682f0085233da9943e8301865b94bd3531da5cf5857e7cfaa92426877b022e612cf8854242424242b86423b872dd0000000000000000000000004cc568b73c0dcf8e90db26d7fd3a6cfadca108a3000000000000000000000000d4c9b20950c3eca38fc1f33f54bdf9694e4887990000000000000000000000000000000000000000000000000000000000000f21c080a094c8632fe7277aa8c54cea9d81a15911cfa4970a2bf7356d14d04cc5afbcdab7a013a77b8c79e5d9b2b35edb3c44db3bb41b92f5c463ff126bf19d213b2b9ba8b5"
|
const rawTx = "0x02f8d601058459682f0085233da9943e8301865b94bd3531da5cf5857e7cfaa92426877b022e612cf8854242424242b86423b872dd0000000000000000000000004cc568b73c0dcf8e90db26d7fd3a6cfadca108a3000000000000000000000000d4c9b20950c3eca38fc1f33f54bdf9694e4887990000000000000000000000000000000000000000000000000000000000000f21c080a094c8632fe7277aa8c54cea9d81a15911cfa4970a2bf7356d14d04cc5afbcdab7a013a77b8c79e5d9b2b35edb3c44db3bb41b92f5c463ff126bf19d213b2b9ba8b5"
|
||||||
const serializedTx = txFromEtherscan(rawTx);
|
const serializedTx = txFromEtherscan(rawTx);
|
||||||
@@ -45,7 +45,7 @@ test('[Nano S] Transfer erc721 with attached ETH', zemu("nanos", async (sim, eth
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano S] set approval for all erc721', zemu("nanos", async (sim, eth) => {
|
test.skip('[Nano S] set approval for all erc721', zemu("nanos", async (sim, eth) => {
|
||||||
|
|
||||||
// https://etherscan.io/tx/0x86b936db53c19fddf26b8d145f165e1c7fdff3c0f8b14b7758a38f0400cfd93f
|
// https://etherscan.io/tx/0x86b936db53c19fddf26b8d145f165e1c7fdff3c0f8b14b7758a38f0400cfd93f
|
||||||
const rawTx = "0x02f8b0010c8459682f00852cfbb00ee682b54294d4e4078ca3495de5b1d4db434bebc5a98619778280b844a22cb4650000000000000000000000002efcb1e8d4472d35356b9747bea8a051eac2e3f50000000000000000000000000000000000000000000000000000000000000001c001a0c5b8c024c15ca1452ce8a13eacfcdc25f1c6f581bb3ce570e82f08f1b792b3aca03be4dba0302ae190618a72eb1202ce3af3e17afd7d8a94345a48cae5cad15541";
|
const rawTx = "0x02f8b0010c8459682f00852cfbb00ee682b54294d4e4078ca3495de5b1d4db434bebc5a98619778280b844a22cb4650000000000000000000000002efcb1e8d4472d35356b9747bea8a051eac2e3f50000000000000000000000000000000000000000000000000000000000000001c001a0c5b8c024c15ca1452ce8a13eacfcdc25f1c6f581bb3ce570e82f08f1b792b3aca03be4dba0302ae190618a72eb1202ce3af3e17afd7d8a94345a48cae5cad15541";
|
||||||
@@ -87,7 +87,7 @@ test.skip('[Nano S] approval erc721', zemu("nanos", async (sim, eth) => {
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano S] safe transfer erc721', zemu("nanos", async (sim, eth) => {
|
test.skip('[Nano S] safe transfer erc721', zemu("nanos", async (sim, eth) => {
|
||||||
|
|
||||||
// https://etherscan.io/tx/0x1ee6ce9be1c9fe6f030ff124ba8c88a410223c022816547e4b3fedd3a4d2dc1e
|
// https://etherscan.io/tx/0x1ee6ce9be1c9fe6f030ff124ba8c88a410223c022816547e4b3fedd3a4d2dc1e
|
||||||
const rawTx = "0xf8cc82028585077359400083061a8094d4e4078ca3495de5b1d4db434bebc5a98619778280b86442842e0e000000000000000000000000c352b534e8b987e036a93539fd6897f53488e56a0000000000000000000000000a9287d9339c175cd3ea0ad4228f734a9f75ee6200000000000000000000000000000000000000000000000000000000000000621ca08250f4b2c8f28c5e4ef621dba4682990d1faf930c8cb6d032c6e7278e8951d92a03c1e1f6d63ed339041f69f24c6c0968ba26f244f779cb4fa7a468f3ba3d3e06e";
|
const rawTx = "0xf8cc82028585077359400083061a8094d4e4078ca3495de5b1d4db434bebc5a98619778280b86442842e0e000000000000000000000000c352b534e8b987e036a93539fd6897f53488e56a0000000000000000000000000a9287d9339c175cd3ea0ad4228f734a9f75ee6200000000000000000000000000000000000000000000000000000000000000621ca08250f4b2c8f28c5e4ef621dba4682990d1faf930c8cb6d032c6e7278e8951d92a03c1e1f6d63ed339041f69f24c6c0968ba26f244f779cb4fa7a468f3ba3d3e06e";
|
||||||
@@ -127,4 +127,4 @@ test.skip('[Nano S] safe transfer with data erc721', zemu("nanos", async (sim, e
|
|||||||
|
|
||||||
await expect(tx).resolves.toEqual({
|
await expect(tx).resolves.toEqual({
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ test('[Nano S] Transfer Ether on network 5234 on Ethereum app', zemu("nanos", as
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Transfer Ether on Ethereum app', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Transfer Ether on Ethereum app', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
@@ -64,7 +64,7 @@ test('[Nano X] Transfer Ether on Ethereum app', zemu("nanox", async (sim, eth) =
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Transfer Ether on network 5234 on Ethereum app', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Transfer Ether on network 5234 on Ethereum app', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ test('[Nano S] Transfer bsc', zemu("nanos", async (sim, eth) => {
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Transfer bsc', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Transfer bsc', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
const tx = eth.signTransaction(
|
const tx = eth.signTransaction(
|
||||||
"44'/60'/1'/0/0",
|
"44'/60'/1'/0/0",
|
||||||
@@ -34,4 +34,4 @@ test('[Nano X] Transfer bsc', zemu("nanox", async (sim, eth) => {
|
|||||||
"s": "6b35492b7108d9d9e1cc7aede536ed6b3173197b56dd873cbc3b43e041d6f407",
|
"s": "6b35492b7108d9d9e1cc7aede536ed6b3173197b56dd873cbc3b43e041d6f407",
|
||||||
"v": "93",
|
"v": "93",
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ test("[Nano S] Transfer on network 5234 on Ethereum clone", async () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("[Nano X] Transfer on Ethereum clone app", async () => {
|
test.skip("[Nano X] Transfer on Ethereum clone app", async () => {
|
||||||
jest.setTimeout(TIMEOUT);
|
jest.setTimeout(TIMEOUT);
|
||||||
const sim = new Zemu(NANOX_CLONE_ELF_PATH, NANOX_ETH_LIB);
|
const sim = new Zemu(NANOX_CLONE_ELF_PATH, NANOX_ETH_LIB);
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ test("[Nano X] Transfer on Ethereum clone app", async () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("[Nano X] Transfer on network 5234 on Ethereum clone", async () => {
|
test.skip("[Nano X] Transfer on network 5234 on Ethereum clone", async () => {
|
||||||
jest.setTimeout(TIMEOUT);
|
jest.setTimeout(TIMEOUT);
|
||||||
const sim = new Zemu(NANOX_CLONE_ELF_PATH, NANOX_ETH_LIB);
|
const sim = new Zemu(NANOX_CLONE_ELF_PATH, NANOX_ETH_LIB);
|
||||||
|
|
||||||
@@ -111,4 +111,4 @@ test("[Nano X] Transfer on network 5234 on Ethereum clone", async () => {
|
|||||||
} finally {
|
} finally {
|
||||||
await sim.close();
|
await sim.close();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ test('[Nano S] Transfer Ether on Ethereum app', zemu("nanos", async (sim, eth) =
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('[Nano X] Transfer Ether on Ethereum app', zemu("nanox", async (sim, eth) => {
|
test.skip('[Nano X] Transfer Ether on Ethereum app', zemu("nanox", async (sim, eth) => {
|
||||||
|
|
||||||
// Provide USDT token info to the app
|
// Provide USDT token info to the app
|
||||||
const usdt_info = byContractAddressAndChainId("0xdac17f958d2ee523a2206206994597c13d831ec7", 1);
|
const usdt_info = byContractAddressAndChainId("0xdac17f958d2ee523a2206206994597c13d831ec7", 1);
|
||||||
|
|||||||
381
tests/yarn.lock
@@ -966,6 +966,21 @@
|
|||||||
"@ethersproject/properties" "^5.4.0"
|
"@ethersproject/properties" "^5.4.0"
|
||||||
"@ethersproject/strings" "^5.4.0"
|
"@ethersproject/strings" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613"
|
||||||
|
integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/address" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/constants" "^5.5.0"
|
||||||
|
"@ethersproject/hash" "^5.5.0"
|
||||||
|
"@ethersproject/keccak256" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/abstract-provider@5.4.1", "@ethersproject/abstract-provider@^5.4.0":
|
"@ethersproject/abstract-provider@5.4.1", "@ethersproject/abstract-provider@^5.4.0":
|
||||||
version "5.4.1"
|
version "5.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e"
|
||||||
@@ -979,6 +994,19 @@
|
|||||||
"@ethersproject/transactions" "^5.4.0"
|
"@ethersproject/transactions" "^5.4.0"
|
||||||
"@ethersproject/web" "^5.4.0"
|
"@ethersproject/web" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0":
|
||||||
|
version "5.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5"
|
||||||
|
integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/networks" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/transactions" "^5.5.0"
|
||||||
|
"@ethersproject/web" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/abstract-signer@5.4.1", "@ethersproject/abstract-signer@^5.4.0":
|
"@ethersproject/abstract-signer@5.4.1", "@ethersproject/abstract-signer@^5.4.0":
|
||||||
version "5.4.1"
|
version "5.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81"
|
||||||
@@ -990,6 +1018,17 @@
|
|||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
"@ethersproject/properties" "^5.4.0"
|
"@ethersproject/properties" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d"
|
||||||
|
integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-provider" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/address@5.4.0", "@ethersproject/address@^5.4.0":
|
"@ethersproject/address@5.4.0", "@ethersproject/address@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3"
|
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3"
|
||||||
@@ -1001,6 +1040,17 @@
|
|||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
"@ethersproject/rlp" "^5.4.0"
|
"@ethersproject/rlp" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/address@5.5.0", "@ethersproject/address@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f"
|
||||||
|
integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/keccak256" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/rlp" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0":
|
"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a"
|
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a"
|
||||||
@@ -1008,6 +1058,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.4.0"
|
"@ethersproject/bytes" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090"
|
||||||
|
integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0":
|
"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6"
|
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6"
|
||||||
@@ -1016,6 +1073,14 @@
|
|||||||
"@ethersproject/bytes" "^5.4.0"
|
"@ethersproject/bytes" "^5.4.0"
|
||||||
"@ethersproject/properties" "^5.4.0"
|
"@ethersproject/properties" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3"
|
||||||
|
integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/bignumber@5.4.1", "@ethersproject/bignumber@^5.4.0":
|
"@ethersproject/bignumber@5.4.1", "@ethersproject/bignumber@^5.4.0":
|
||||||
version "5.4.1"
|
version "5.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.1.tgz#64399d3b9ae80aa83d483e550ba57ea062c1042d"
|
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.1.tgz#64399d3b9ae80aa83d483e550ba57ea062c1042d"
|
||||||
@@ -1025,6 +1090,15 @@
|
|||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
bn.js "^4.11.9"
|
bn.js "^4.11.9"
|
||||||
|
|
||||||
|
"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527"
|
||||||
|
integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
bn.js "^4.11.9"
|
||||||
|
|
||||||
"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@^5.4.0":
|
"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e"
|
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e"
|
||||||
@@ -1032,6 +1106,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c"
|
||||||
|
integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/constants@5.4.0", "@ethersproject/constants@^5.4.0":
|
"@ethersproject/constants@5.4.0", "@ethersproject/constants@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a"
|
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a"
|
||||||
@@ -1039,6 +1120,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bignumber" "^5.4.0"
|
"@ethersproject/bignumber" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e"
|
||||||
|
integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/contracts@5.4.1":
|
"@ethersproject/contracts@5.4.1":
|
||||||
version "5.4.1"
|
version "5.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.1.tgz#3eb4f35b7fe60a962a75804ada2746494df3e470"
|
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.1.tgz#3eb4f35b7fe60a962a75804ada2746494df3e470"
|
||||||
@@ -1055,6 +1143,22 @@
|
|||||||
"@ethersproject/properties" "^5.4.0"
|
"@ethersproject/properties" "^5.4.0"
|
||||||
"@ethersproject/transactions" "^5.4.0"
|
"@ethersproject/transactions" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/contracts@5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197"
|
||||||
|
integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abi" "^5.5.0"
|
||||||
|
"@ethersproject/abstract-provider" "^5.5.0"
|
||||||
|
"@ethersproject/abstract-signer" "^5.5.0"
|
||||||
|
"@ethersproject/address" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/constants" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/transactions" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/hash@5.4.0", "@ethersproject/hash@^5.4.0":
|
"@ethersproject/hash@5.4.0", "@ethersproject/hash@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0"
|
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0"
|
||||||
@@ -1069,6 +1173,20 @@
|
|||||||
"@ethersproject/properties" "^5.4.0"
|
"@ethersproject/properties" "^5.4.0"
|
||||||
"@ethersproject/strings" "^5.4.0"
|
"@ethersproject/strings" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9"
|
||||||
|
integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-signer" "^5.5.0"
|
||||||
|
"@ethersproject/address" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/keccak256" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0":
|
"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac"
|
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac"
|
||||||
@@ -1087,6 +1205,24 @@
|
|||||||
"@ethersproject/transactions" "^5.4.0"
|
"@ethersproject/transactions" "^5.4.0"
|
||||||
"@ethersproject/wordlists" "^5.4.0"
|
"@ethersproject/wordlists" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6"
|
||||||
|
integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-signer" "^5.5.0"
|
||||||
|
"@ethersproject/basex" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/pbkdf2" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/sha2" "^5.5.0"
|
||||||
|
"@ethersproject/signing-key" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
"@ethersproject/transactions" "^5.5.0"
|
||||||
|
"@ethersproject/wordlists" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0":
|
"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95"
|
resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95"
|
||||||
@@ -1106,6 +1242,25 @@
|
|||||||
aes-js "3.0.0"
|
aes-js "3.0.0"
|
||||||
scrypt-js "3.0.1"
|
scrypt-js "3.0.1"
|
||||||
|
|
||||||
|
"@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325"
|
||||||
|
integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-signer" "^5.5.0"
|
||||||
|
"@ethersproject/address" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/hdnode" "^5.5.0"
|
||||||
|
"@ethersproject/keccak256" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/pbkdf2" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/random" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
"@ethersproject/transactions" "^5.5.0"
|
||||||
|
aes-js "3.0.0"
|
||||||
|
scrypt-js "3.0.1"
|
||||||
|
|
||||||
"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@^5.4.0":
|
"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318"
|
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318"
|
||||||
@@ -1114,11 +1269,24 @@
|
|||||||
"@ethersproject/bytes" "^5.4.0"
|
"@ethersproject/bytes" "^5.4.0"
|
||||||
js-sha3 "0.5.7"
|
js-sha3 "0.5.7"
|
||||||
|
|
||||||
|
"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492"
|
||||||
|
integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
js-sha3 "0.8.0"
|
||||||
|
|
||||||
"@ethersproject/logger@5.4.0", "@ethersproject/logger@^5.4.0":
|
"@ethersproject/logger@5.4.0", "@ethersproject/logger@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9"
|
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9"
|
||||||
integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ==
|
integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ==
|
||||||
|
|
||||||
|
"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d"
|
||||||
|
integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==
|
||||||
|
|
||||||
"@ethersproject/networks@5.4.2", "@ethersproject/networks@^5.4.0":
|
"@ethersproject/networks@5.4.2", "@ethersproject/networks@^5.4.0":
|
||||||
version "5.4.2"
|
version "5.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35"
|
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35"
|
||||||
@@ -1126,6 +1294,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/networks@5.5.0", "@ethersproject/networks@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.0.tgz#babec47cab892c51f8dd652ce7f2e3e14283981a"
|
||||||
|
integrity sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0":
|
"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c"
|
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c"
|
||||||
@@ -1134,6 +1309,14 @@
|
|||||||
"@ethersproject/bytes" "^5.4.0"
|
"@ethersproject/bytes" "^5.4.0"
|
||||||
"@ethersproject/sha2" "^5.4.0"
|
"@ethersproject/sha2" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050"
|
||||||
|
integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/sha2" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/properties@5.4.0", "@ethersproject/properties@^5.4.0":
|
"@ethersproject/properties@5.4.0", "@ethersproject/properties@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7"
|
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7"
|
||||||
@@ -1141,6 +1324,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995"
|
||||||
|
integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/providers@5.4.4":
|
"@ethersproject/providers@5.4.4":
|
||||||
version "5.4.4"
|
version "5.4.4"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.4.tgz#6729120317942fc0ab0ecdb35e944ec6bbedb795"
|
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.4.tgz#6729120317942fc0ab0ecdb35e944ec6bbedb795"
|
||||||
@@ -1166,6 +1356,31 @@
|
|||||||
bech32 "1.1.4"
|
bech32 "1.1.4"
|
||||||
ws "7.4.6"
|
ws "7.4.6"
|
||||||
|
|
||||||
|
"@ethersproject/providers@5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.0.tgz#bc2876a8fe5e0053ed9828b1f3767ae46e43758b"
|
||||||
|
integrity sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-provider" "^5.5.0"
|
||||||
|
"@ethersproject/abstract-signer" "^5.5.0"
|
||||||
|
"@ethersproject/address" "^5.5.0"
|
||||||
|
"@ethersproject/basex" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/constants" "^5.5.0"
|
||||||
|
"@ethersproject/hash" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/networks" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/random" "^5.5.0"
|
||||||
|
"@ethersproject/rlp" "^5.5.0"
|
||||||
|
"@ethersproject/sha2" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
"@ethersproject/transactions" "^5.5.0"
|
||||||
|
"@ethersproject/web" "^5.5.0"
|
||||||
|
bech32 "1.1.4"
|
||||||
|
ws "7.4.6"
|
||||||
|
|
||||||
"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0":
|
"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16"
|
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16"
|
||||||
@@ -1174,6 +1389,14 @@
|
|||||||
"@ethersproject/bytes" "^5.4.0"
|
"@ethersproject/bytes" "^5.4.0"
|
||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/random@5.5.0", "@ethersproject/random@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.0.tgz#305ed9e033ca537735365ac12eed88580b0f81f9"
|
||||||
|
integrity sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0":
|
"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931"
|
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931"
|
||||||
@@ -1182,6 +1405,14 @@
|
|||||||
"@ethersproject/bytes" "^5.4.0"
|
"@ethersproject/bytes" "^5.4.0"
|
||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0"
|
||||||
|
integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0":
|
"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371"
|
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371"
|
||||||
@@ -1191,6 +1422,15 @@
|
|||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
hash.js "1.1.7"
|
hash.js "1.1.7"
|
||||||
|
|
||||||
|
"@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7"
|
||||||
|
integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
hash.js "1.1.7"
|
||||||
|
|
||||||
"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0":
|
"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec"
|
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec"
|
||||||
@@ -1203,6 +1443,18 @@
|
|||||||
elliptic "6.5.4"
|
elliptic "6.5.4"
|
||||||
hash.js "1.1.7"
|
hash.js "1.1.7"
|
||||||
|
|
||||||
|
"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0"
|
||||||
|
integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
bn.js "^4.11.9"
|
||||||
|
elliptic "6.5.4"
|
||||||
|
hash.js "1.1.7"
|
||||||
|
|
||||||
"@ethersproject/solidity@5.4.0":
|
"@ethersproject/solidity@5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec"
|
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec"
|
||||||
@@ -1214,6 +1466,18 @@
|
|||||||
"@ethersproject/sha2" "^5.4.0"
|
"@ethersproject/sha2" "^5.4.0"
|
||||||
"@ethersproject/strings" "^5.4.0"
|
"@ethersproject/strings" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/solidity@5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f"
|
||||||
|
integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/keccak256" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/sha2" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/strings@5.4.0", "@ethersproject/strings@^5.4.0":
|
"@ethersproject/strings@5.4.0", "@ethersproject/strings@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a"
|
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a"
|
||||||
@@ -1223,6 +1487,15 @@
|
|||||||
"@ethersproject/constants" "^5.4.0"
|
"@ethersproject/constants" "^5.4.0"
|
||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549"
|
||||||
|
integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/constants" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.4.0":
|
"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0"
|
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0"
|
||||||
@@ -1238,6 +1511,21 @@
|
|||||||
"@ethersproject/rlp" "^5.4.0"
|
"@ethersproject/rlp" "^5.4.0"
|
||||||
"@ethersproject/signing-key" "^5.4.0"
|
"@ethersproject/signing-key" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908"
|
||||||
|
integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/address" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/constants" "^5.5.0"
|
||||||
|
"@ethersproject/keccak256" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/rlp" "^5.5.0"
|
||||||
|
"@ethersproject/signing-key" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/units@5.4.0":
|
"@ethersproject/units@5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe"
|
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe"
|
||||||
@@ -1247,6 +1535,15 @@
|
|||||||
"@ethersproject/constants" "^5.4.0"
|
"@ethersproject/constants" "^5.4.0"
|
||||||
"@ethersproject/logger" "^5.4.0"
|
"@ethersproject/logger" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/units@5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e"
|
||||||
|
integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/constants" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/wallet@5.4.0":
|
"@ethersproject/wallet@5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353"
|
resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353"
|
||||||
@@ -1268,6 +1565,27 @@
|
|||||||
"@ethersproject/transactions" "^5.4.0"
|
"@ethersproject/transactions" "^5.4.0"
|
||||||
"@ethersproject/wordlists" "^5.4.0"
|
"@ethersproject/wordlists" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/wallet@5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75"
|
||||||
|
integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-provider" "^5.5.0"
|
||||||
|
"@ethersproject/abstract-signer" "^5.5.0"
|
||||||
|
"@ethersproject/address" "^5.5.0"
|
||||||
|
"@ethersproject/bignumber" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/hash" "^5.5.0"
|
||||||
|
"@ethersproject/hdnode" "^5.5.0"
|
||||||
|
"@ethersproject/json-wallets" "^5.5.0"
|
||||||
|
"@ethersproject/keccak256" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/random" "^5.5.0"
|
||||||
|
"@ethersproject/signing-key" "^5.5.0"
|
||||||
|
"@ethersproject/transactions" "^5.5.0"
|
||||||
|
"@ethersproject/wordlists" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0":
|
"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f"
|
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f"
|
||||||
@@ -1279,6 +1597,17 @@
|
|||||||
"@ethersproject/properties" "^5.4.0"
|
"@ethersproject/properties" "^5.4.0"
|
||||||
"@ethersproject/strings" "^5.4.0"
|
"@ethersproject/strings" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/web@5.5.0", "@ethersproject/web@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.0.tgz#0e5bb21a2b58fb4960a705bfc6522a6acf461e28"
|
||||||
|
integrity sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/base64" "^5.5.0"
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
|
||||||
"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0":
|
"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0":
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7"
|
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7"
|
||||||
@@ -1290,6 +1619,17 @@
|
|||||||
"@ethersproject/properties" "^5.4.0"
|
"@ethersproject/properties" "^5.4.0"
|
||||||
"@ethersproject/strings" "^5.4.0"
|
"@ethersproject/strings" "^5.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f"
|
||||||
|
integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.5.0"
|
||||||
|
"@ethersproject/hash" "^5.5.0"
|
||||||
|
"@ethersproject/logger" "^5.5.0"
|
||||||
|
"@ethersproject/properties" "^5.5.0"
|
||||||
|
"@ethersproject/strings" "^5.5.0"
|
||||||
|
|
||||||
"@grpc/grpc-js@^1.3.4":
|
"@grpc/grpc-js@^1.3.4":
|
||||||
version "1.3.7"
|
version "1.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8"
|
resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8"
|
||||||
@@ -3176,6 +3516,42 @@ ethers@^5.4.4:
|
|||||||
"@ethersproject/web" "5.4.0"
|
"@ethersproject/web" "5.4.0"
|
||||||
"@ethersproject/wordlists" "5.4.0"
|
"@ethersproject/wordlists" "5.4.0"
|
||||||
|
|
||||||
|
ethers@^5.5.1:
|
||||||
|
version "5.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf"
|
||||||
|
integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abi" "5.5.0"
|
||||||
|
"@ethersproject/abstract-provider" "5.5.1"
|
||||||
|
"@ethersproject/abstract-signer" "5.5.0"
|
||||||
|
"@ethersproject/address" "5.5.0"
|
||||||
|
"@ethersproject/base64" "5.5.0"
|
||||||
|
"@ethersproject/basex" "5.5.0"
|
||||||
|
"@ethersproject/bignumber" "5.5.0"
|
||||||
|
"@ethersproject/bytes" "5.5.0"
|
||||||
|
"@ethersproject/constants" "5.5.0"
|
||||||
|
"@ethersproject/contracts" "5.5.0"
|
||||||
|
"@ethersproject/hash" "5.5.0"
|
||||||
|
"@ethersproject/hdnode" "5.5.0"
|
||||||
|
"@ethersproject/json-wallets" "5.5.0"
|
||||||
|
"@ethersproject/keccak256" "5.5.0"
|
||||||
|
"@ethersproject/logger" "5.5.0"
|
||||||
|
"@ethersproject/networks" "5.5.0"
|
||||||
|
"@ethersproject/pbkdf2" "5.5.0"
|
||||||
|
"@ethersproject/properties" "5.5.0"
|
||||||
|
"@ethersproject/providers" "5.5.0"
|
||||||
|
"@ethersproject/random" "5.5.0"
|
||||||
|
"@ethersproject/rlp" "5.5.0"
|
||||||
|
"@ethersproject/sha2" "5.5.0"
|
||||||
|
"@ethersproject/signing-key" "5.5.0"
|
||||||
|
"@ethersproject/solidity" "5.5.0"
|
||||||
|
"@ethersproject/strings" "5.5.0"
|
||||||
|
"@ethersproject/transactions" "5.5.0"
|
||||||
|
"@ethersproject/units" "5.5.0"
|
||||||
|
"@ethersproject/wallet" "5.5.0"
|
||||||
|
"@ethersproject/web" "5.5.0"
|
||||||
|
"@ethersproject/wordlists" "5.5.0"
|
||||||
|
|
||||||
events@^3.0.0, events@^3.3.0:
|
events@^3.0.0, events@^3.3.0:
|
||||||
version "3.3.0"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
|
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
|
||||||
@@ -4806,6 +5182,11 @@ js-sha3@0.5.7:
|
|||||||
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"
|
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"
|
||||||
integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=
|
integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=
|
||||||
|
|
||||||
|
js-sha3@0.8.0:
|
||||||
|
version "0.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
|
||||||
|
integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
|
||||||
|
|
||||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||||
|
|||||||