{"version":3,"file":"main.js","mappings":"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AAAA,MAAAA,wDAAAA;;;;;;;;;;;;;;;;;;;;ACtDrB,mFAAmF;AACnF,8FAA8F;AAC9F,yEAAyE;AACzE,gFAAgF;AAEzE,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE,2BAA2B;CACrC,CAAC;;;;;;;;;;;;;;;;;;ACR2C;AAGF;AACY;AAEvD,IAAI,6EAAsB,EAAE;IAC1B,6DAAc,EAAE,CAAC;CAClB;AAED,wEAAwB,CAAC,eAAe,CAAC,sDAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;;;;;;;;;;ACVnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,sDAAsD,aAAa;AACnE;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA,wBAAwB;AACxB;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,sBAAsB,+CAA+C;AAChF,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sBAAsB,+CAA+C;AAChF,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,kBAAkB;AAC7F;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,qBAAqB;AACtG;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA,iFAAiF,qBAAqB;AACtG;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,oBAAoB;AACrG;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,2BAA2B;AACrH;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA,0FAA0F,2BAA2B;AACrH;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,uBAAuB;AAC3G;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,8BAA8B;AAC3H;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA,6FAA6F,8BAA8B;AAC3H;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,mBAAmB;AAC5F;AACA,WAAW,qBAAqB;AAChC,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kBAAkB;AACrE;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,oBAAoB;AACnG;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,oBAAoB;AAChG;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kBAAkB;AACtF;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,qBAAqB;AAClH;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,sBAAsB;AACnI;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wGAAwG,8BAA8B;AACtI;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,wGAAwG,8BAA8B;AACtI;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC1yCA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA","sources":["./lib/prokey-webcore/src/blockchain/BitcoinBlockchain.ts","./lib/prokey-webcore/src/blockchain/BlockchainBase.ts","./lib/prokey-webcore/src/blockchain/BlockchainProviders.ts","./lib/prokey-webcore/src/blockchain/EthereumBlockchain.ts","./lib/prokey-webcore/src/blockchain/RippleBlockchain.ts","./lib/prokey-webcore/src/blockchain/_servers/BaseBlockchainServer.ts","./lib/prokey-webcore/src/blockchain/_servers/blockbook/BlockbookRequestModels.ts","./lib/prokey-webcore/src/blockchain/_servers/blockbook/BlockbookServer.ts","./lib/prokey-webcore/src/blockchain/_servers/public/PublicEthereumServer.ts","./lib/prokey-webcore/src/blockchain/_servers/ripple/RippleRpcServer.ts","./lib/prokey-webcore/src/coins/CoinInfo.ts","./lib/prokey-webcore/src/device/BitcoinCommands.ts","./lib/prokey-webcore/src/device/Device.ts","./lib/prokey-webcore/src/device/EthereumCommands.ts","./lib/prokey-webcore/src/device/NemCommands.ts","./lib/prokey-webcore/src/device/RippleCommands.ts","./lib/prokey-webcore/src/models/GeneralResponse.ts","./lib/prokey-webcore/src/models/Prokey.ts","./lib/prokey-webcore/src/protobuf/Protobuf.ts","./lib/prokey-webcore/src/transport/ITransport.ts","./lib/prokey-webcore/src/transport/WebSocketTransport.ts","./lib/prokey-webcore/src/transport/WebUsb.ts","./lib/prokey-webcore/src/utils/DeviceUtils.ts","./lib/prokey-webcore/src/utils/address.ts","./lib/prokey-webcore/src/utils/console.ts","./lib/prokey-webcore/src/utils/constants.ts","./lib/prokey-webcore/src/utils/ethereum-hashTypedData.ts","./lib/prokey-webcore/src/utils/ethereum-networks.ts","./lib/prokey-webcore/src/utils/ethereum-providers.ts","./lib/prokey-webcore/src/utils/paramsValidator.ts","./lib/prokey-webcore/src/utils/pathUtils.ts","./lib/prokey-webcore/src/utils/rlp-encoding.ts","./lib/prokey-webcore/src/utils/utils.ts","./lib/prokey-webcore/src/wallet/BaseWallet.ts","./lib/prokey-webcore/src/wallet/BitcoinWallet.ts","./lib/prokey-webcore/src/wallet/EthereumWallet.ts","./lib/prokey-webcore/src/wallet/OmniWallet.ts","./lib/prokey-webcore/src/wallet/RippleWallet.ts","./src/app/_configs/rest-urls.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/core/component/app-header/app-header.component.ts","./src/app/core/component/app-header/app-header.component.html","./src/app/core/component/exchange-layout/exchange-layout.component.html","./src/app/core/component/exchange-layout/exchange-layout.component.ts","./src/app/core/component/spinner-loading/spinner-loading.component.ts","./src/app/core/component/wallet-add-coin/wallet-add-coin.component.ts","./src/app/core/component/wallet-add-coin/wallet-add-coin.component.html","./src/app/core/component/wallet-add-coin/wallet-add-custom-token/wallet-add-custom-token.component.ts","./src/app/core/component/wallet-add-coin/wallet-add-custom-token/wallet-add-custom-token.component.html","./src/app/core/component/wallet-device-info/wallet-device-info.component.ts","./src/app/core/component/wallet-device-info/wallet-device-info.component.html","./src/app/core/component/wallet-device-reboot/wallet-device-reboot.component.ts","./src/app/core/component/wallet-device-reboot/wallet-device-reboot.component.html","./src/app/core/component/wallet-footer-layout/wallet-footer-layout.component.ts","./src/app/core/component/wallet-footer-layout/wallet-footer-layout.component.html","./src/app/core/component/wallet-forget-device/wallet-forget-device.component.ts","./src/app/core/component/wallet-forget-device/wallet-forget-device.component.html","./src/app/core/component/wallet-header-layout/wallet-header-layout.component.ts","./src/app/core/component/wallet-header-layout/wallet-header-layout.component.html","./src/app/core/component/wallet-layout/wallet-layout.component.ts","./src/app/core/component/wallet-layout/wallet-layout.component.html","./src/app/core/component/wallet-no-backup/wallet-no-backup.component.ts","./src/app/core/component/wallet-no-backup/wallet-no-backup.component.html","./src/app/core/component/wallet-notify-layout/wallet-notify-layout.component.ts","./src/app/core/component/wallet-notify-layout/wallet-notify-layout.component.html","./src/app/core/component/wallet-passphrase-request/wallet-passphrase-request.component.ts","./src/app/core/component/wallet-passphrase-request/wallet-passphrase-request.component.html","./src/app/core/component/wallet-pin-on-device/wallet-pin-on-device.component.ts","./src/app/core/component/wallet-pin-on-device/wallet-pin-on-device.component.html","./src/app/core/component/wallet-pin-request/wallet-pin-request.component.ts","./src/app/core/component/wallet-pin-request/wallet-pin-request.component.html","./src/app/core/component/wallet-sidebar-layout/wallet-sidebar-layout.component.ts","./src/app/core/component/wallet-sidebar-layout/wallet-sidebar-layout.component.html","./src/app/core/component/wallet-sidemenu-layout/wallet-sidemenu-layout.component.ts","./src/app/core/component/wallet-sidemenu-layout/wallet-sidemenu-layout.component.html","./src/app/core/core.module.ts","./src/app/core/models/bootloader/ChallengeErrors.ts","./src/app/core/models/connect/asset-info.ts","./src/app/core/models/connect/button-request-type.enum.ts","./src/app/core/models/connect/coin-model.ts","./src/app/core/models/connect/device-firmware-status.enum.ts","./src/app/core/models/connect/device-mode.enum.ts","./src/app/core/models/connect/failure-type.enum.ts","./src/app/core/models/connect/transaction-type.enum.ts","./src/app/core/models/connect/ui-event.enum.ts","./src/app/core/models/layout-mode.ts","./src/app/core/models/prokey-settings-key.enum.ts","./src/app/core/services/bootloader/bootloader.service.ts","./src/app/core/services/bootloader/bridge.service.ts","./src/app/core/services/bootloader/challenge.service.ts","./src/app/core/services/bootloader/transport.service.ts","./src/app/core/services/bootloader/webusb.service.ts","./src/app/core/services/coin-market.service.ts","./src/app/core/services/coins/bitcoin.ts","./src/app/core/services/coins/ethereum.ts","./src/app/core/services/coins/omni.ts","./src/app/core/services/coins/ripple.ts","./src/app/core/services/coins/wallet-coins.ts","./src/app/core/services/coins/wallet.ts","./src/app/core/services/custom-error-handler.service.ts","./src/app/core/services/custom-token.service.ts","./src/app/core/services/helpers.ts","./src/app/core/services/layout.service.ts","./src/app/core/services/oauth2/google-oath2-provider.service.ts","./src/app/core/services/prokey-settings.service.ts","./src/app/core/services/script-loader.service.ts","./src/app/core/services/storage/repository/google-drive/google-storage-repository.service.ts","./src/app/core/services/storage/repository/local-storage-service.ts","./src/app/core/services/storage/storage.service.ts","./src/app/core/services/wallet-device-events.service.ts","./src/app/core/services/wallet-device.service.ts","./src/app/core/services/wallet-tour.service.ts","./src/app/core/services/wallet.service.ts","./src/app/core/services/window.service.ts","./src/app/core/services/xsrf.interceptor.ts","./src/app/page-not-found/page-not-found.component.ts","./src/app/page-not-found/page-not-found.component.html","./src/app/shared/components/alert/alert.component.ts","./src/app/shared/components/alert/alert.component.html","./src/app/shared/components/confirmation-dialog/confirmation-dialog.component.ts","./src/app/shared/components/confirmation-dialog/confirmation-dialog.component.html","./src/app/shared/dialog/_directive/dialog-footer-directive.ts","./src/app/shared/dialog/_services/dialog.service.ts","./src/app/shared/dialog/dialog.component.ts","./src/app/shared/dialog/dialog.component.html","./src/app/shared/dialog/dialog.module.ts","./src/app/shared/directives/address-validator.directive.ts","./src/app/shared/directives/amount-validator.directive.ts","./src/app/shared/directives/equal-validator.directive.ts","./src/app/shared/models/alert-type.enum.ts","./src/app/shared/pipes/address-path-index.pipe.ts","./src/app/shared/pipes/coin-type-to-name.pipe.ts","./src/app/shared/pipes/coin-unit.pipe.ts","./src/app/shared/pipes/num-to-ordinary.pipe.ts","./src/app/shared/pipes/safe.pipe.ts","./src/app/shared/shared.module.ts","./src/app/start/start.component.ts","./src/app/start/start.component.html","./src/app/wallet/backup/backup.component.ts","./src/app/wallet/backup/backup.component.html","./src/app/wallet/device/coin-fee/coin-fee.component.ts","./src/app/wallet/device/coin-fee/coin-fee.component.html","./src/app/wallet/device/device/device.component.ts","./src/app/wallet/device/device/device.component.html","./src/app/wallet/device/exchange/components/compare-coin/exchange.component.ts","./src/app/wallet/device/exchange/components/compare-coin/exchange.component.html","./src/app/wallet/device/exchange/components/offer-list/offer-list.component.ts","./src/app/wallet/device/exchange/components/offer-list/offer-list.component.html","./src/app/wallet/device/exchange/components/receive-coin/receive-coin.component.ts","./src/app/wallet/device/exchange/components/receive-coin/receive-coin.component.html","./src/app/wallet/device/exchange/components/receive-exchange/receive-exchange.component.ts","./src/app/wallet/device/exchange/components/receive-exchange/receive-exchange.component.html","./src/app/wallet/device/exchange/components/send-coin/send-coin.component.ts","./src/app/wallet/device/exchange/components/send-coin/send-coin.component.html","./src/app/wallet/device/exchange/components/status-exchange/status-exchange.component.ts","./src/app/wallet/device/exchange/components/status-exchange/status-exchange.component.html","./src/app/wallet/device/exchange/errors/exchange.exception.ts","./src/app/wallet/device/exchange/models/status-type.ts","./src/app/wallet/device/exchange/services/exchange.service.ts","./src/app/wallet/device/exchange/services/providers/baseProvider.ts","./src/app/wallet/device/exchange/services/providers/changeNow-provider.ts","./src/app/wallet/device/exchange/services/providers/changelly-provider.ts","./src/app/wallet/device/models/send-step.enum.ts","./src/app/wallet/device/processing-dialog/processing-dialog.component.ts","./src/app/wallet/device/processing-dialog/processing-dialog.component.html","./src/app/wallet/device/receive/receive.component.ts","./src/app/wallet/device/receive/receive.component.html","./src/app/wallet/device/send/send.component.ts","./src/app/wallet/device/send/send.component.html","./src/app/wallet/device/sign-verify/sign-verify.component.ts","./src/app/wallet/device/sign-verify/sign-verify.component.html","./src/app/wallet/device/transactions/transactions.component.ts","./src/app/wallet/device/transactions/transactions.component.html","./src/app/wallet/portfolio/portfolio.component.ts","./src/app/wallet/portfolio/portfolio.component.html","./src/app/wallet/route-active/storage.guard.ts","./src/app/wallet/settings/advance-settings/advance-settings.component.ts","./src/app/wallet/settings/advance-settings/advance-settings.component.html","./src/app/wallet/settings/basic-settings/basic-settings.component.ts","./src/app/wallet/settings/basic-settings/basic-settings.component.html","./src/app/wallet/settings/google-auth-insuffient-scope-dialig/google-auth-insufficient-scope-dialog.component.ts","./src/app/wallet/settings/google-auth-insuffient-scope-dialig/google-auth-insufficient-scope-dialog.component.html","./src/app/wallet/settings/reset-passphrase-dialog/reset-passphrase-dialog.component.ts","./src/app/wallet/settings/reset-passphrase-dialog/reset-passphrase-dialog.component.html","./src/app/wallet/settings/storage-auth-dialog/storage-auth-dialog.component.ts","./src/app/wallet/settings/storage-auth-dialog/storage-auth-dialog.component.html","./src/app/wallet/settings/storage-sync-dialog/storage-sync-dialog.component.ts","./src/app/wallet/settings/storage-sync-dialog/storage-sync-dialog.component.html","./src/app/wallet/settings/user-settings/user-settings.component.ts","./src/app/wallet/settings/user-settings/user-settings.component.html","./src/app/wallet/settings/wallet-settings/wallet-settings.component.ts","./src/app/wallet/settings/wallet-settings/wallet-settings.component.html","./src/app/wallet/settings/wipe-device-dialog/wipe-device-dialog.component.ts","./src/app/wallet/settings/wipe-device-dialog/wipe-device-dialog.component.html","./src/app/wallet/wallet-routing.module.ts","./src/app/wallet/wallet.module.ts","./src/app/welcome/welcome.component.ts","./src/app/welcome/welcome.component.html","./src/environments/environment.ts","./src/main.ts","./lib/prokey-webcore/src/protobuf/long.js","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\bn.js\\lib|buffer","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\brorand|crypto","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\elliptic\\node_modules\\bn.js\\lib|buffer","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\ethereumjs-abi\\node_modules\\bn.js\\lib|buffer","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\ethereumjs-util\\node_modules\\bn.js\\lib|buffer","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\hash-base\\node_modules\\readable-stream\\lib\\internal\\streams|util","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\hash-base\\node_modules\\readable-stream\\lib|util","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\keccak\\node_modules\\readable-stream\\lib\\internal\\streams|util","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\keccak\\node_modules\\readable-stream\\lib|util","ignored|C:\\MyProjects\\prokey\\prokey-website-clientapp\\lib\\prokey-webcore\\node_modules\\tweetnacl|crypto"],"sourcesContent":["/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { BlockchainBase } from './BlockchainBase';\r\nimport * as WalletModel from '../models/BitcoinWalletModel';\r\nimport { RequestAddressInfo } from '../models/GenericWalletModel';\r\nimport { BlockchainServerModel } from './BlockchainProviders';\r\nimport { BlockbookServer } from './_servers/blockbook/BlockbookServer';\r\nimport {\r\n BlockbookDetails,\r\n BlockbookRequestDetails,\r\n BlockbookTokens,\r\n} from './_servers/blockbook/BlockbookRequestModels';\r\nimport { MyConsole } from '../utils/console';\r\nimport { AddressModel } from '../models/Prokey';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport * as GenericWalletModel from '../models/GenericWalletModel';\r\nimport * as BlockbookModels from './_servers/blockbook/BlockbookBitcoinModel';\r\nimport { Request, newHttpClient } from 'typescript-http-client';\r\nimport { BitcoinWallet } from '../wallet/BitcoinWallet';\r\n\r\nexport class BitcoinBlockchain extends BlockchainBase {\r\n _lastFeeFetchTime: Date = new Date();\r\n _lastFee: WalletModel.BitcoinFee = {};\r\n\r\n constructor(servers: BlockchainServerModel[]) {\r\n super(servers);\r\n\r\n //! Initial time to yesterday\r\n this._lastFeeFetchTime.setDate(this._lastFeeFetchTime.getDate() - 1);\r\n }\r\n\r\n /**\r\n * Get address info\r\n * @param reqAdd The address\r\n * @returns Bitcoin Address Info\r\n */\r\n public async GetAddressInfo(\r\n reqAdd: AddressModel,\r\n isIncludeTransactionData = true\r\n ): Promise {\r\n this._ensureThereIsAServer();\r\n\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].apiType == 'blockbook') {\r\n const reqDetails = new BlockbookRequestDetails();\r\n if (isIncludeTransactionData) {\r\n reqDetails.details = BlockbookDetails.Txs;\r\n }\r\n\r\n try {\r\n let addInfo: WalletModel.BitcoinAddressInfoModel =\r\n await BlockbookServer.GetAddressInfo(\r\n this._servers[i],\r\n reqAdd.address,\r\n reqDetails\r\n );\r\n\r\n //! Add address model\r\n addInfo.addressModel = reqAdd;\r\n\r\n return addInfo;\r\n } catch (e) {\r\n MyConsole.Exception('BitcoinBlockchain::GetAddressInfo->', e);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::GetAccountInfoByPublicKey->No server to handle the request');\r\n }\r\n\r\n /**\r\n * Get account information using public key\r\n * @param publicKey The extended public key\r\n * @returns Bitcoin account info\r\n */\r\n public async GetAccountInfoByPublicKey(publicKey: string): Promise {\r\n this._ensureThereIsAServer();\r\n\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].isSupportXpub != true) continue;\r\n\r\n if (this._servers[i].apiType == 'blockbook') {\r\n const req = new BlockbookRequestDetails();\r\n req.details = BlockbookDetails.Txs;\r\n req.tokens = BlockbookTokens.Used;\r\n\r\n // in case of any error, try the next server\r\n try {\r\n let accInfo: WalletModel.BitcoinAccountInfo = await BlockbookServer.GetAccount(\r\n this._servers[i],\r\n publicKey,\r\n req\r\n );\r\n\r\n // pars token data\r\n if (accInfo.tokens && accInfo.tokens.length > 0) {\r\n accInfo.addresses = [];\r\n accInfo.changeAddresses = [];\r\n accInfo.tokens\r\n .filter((t) => t.type == 'XPUBAddress')\r\n .forEach((t) => {\r\n let path = PathUtil.getHDPath(t.path);\r\n // Set change addresses\r\n if (PathUtil.IsChangePath(path)) {\r\n accInfo.changeAddresses?.push({\r\n address: t.name,\r\n path: path,\r\n });\r\n }\r\n // Set addresses\r\n else {\r\n accInfo.addresses?.push({\r\n address: t.name,\r\n path: path,\r\n });\r\n }\r\n });\r\n }\r\n\r\n return accInfo;\r\n } catch (e) {\r\n MyConsole.Exception('BitcoinBlockchain::GetAccountInfoByPublicKey->', e);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::GetAccountInfoByPublicKey->No server to handle the request');\r\n }\r\n\r\n /**\r\n * Get bitcoin transaction data in the exact format as returned by backend\r\n * @param transactionId Transaction ID\r\n */\r\n public async GetRawTransaction(transactionId: string): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].apiType == 'blockbook') {\r\n let txInfo = await BlockbookServer.GetRawTransaction(this._servers[i], transactionId);\r\n\r\n return txInfo;\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::GetRawTransaction->No server to handle the request');\r\n }\r\n\r\n /**\r\n * Get account utxo by public key\r\n * @param publicKey The extended public key\r\n * @returns List of UTXO\r\n */\r\n public async GetAccountUtxoByPublicKey(publicKey: string): Promise {\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].isSupportXpub != true) {\r\n continue;\r\n }\r\n\r\n if (this._servers[i].apiType == 'blockbook') {\r\n // in case of any error, try the next server\r\n try {\r\n let utxos: WalletModel.BitcoinUtxoModel[] = await BlockbookServer.GetUtxo(\r\n this._servers[i],\r\n publicKey\r\n );\r\n\r\n return utxos;\r\n } catch (e) {\r\n MyConsole.Exception('BitcoinBlockchain::GetAccountUtxoByPublicKey->', e);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::GetAccountUtxoByPublicKey->No server to handle the request');\r\n }\r\n\r\n /**\r\n * Get account utxo by public key\r\n * @param publicKey The extended public key\r\n * @returns List of UTXO\r\n */\r\n public async GetAddressUtxo(address: string): Promise {\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].isSupportXpub != true) {\r\n continue;\r\n }\r\n\r\n if (this._servers[i].apiType == 'blockbook') {\r\n // in case of any error, try the next server\r\n try {\r\n let utxos: WalletModel.BitcoinUtxoModel[] = await BlockbookServer.GetUtxo(\r\n this._servers[i],\r\n address\r\n );\r\n\r\n return utxos;\r\n } catch (e) {\r\n MyConsole.Exception('BitcoinBlockchain::GetAddressUtxo->', e);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::GetAddressUtxo->No server to handle the request');\r\n }\r\n\r\n /**\r\n * Get account info by addresses\r\n * @param addresses\r\n */\r\n public GetAccountInfoByAddresses(addresses: RequestAddressInfo[]) {}\r\n\r\n /**\r\n * Send new transaction to network\r\n * @param transaction raw signed transaction to be sent\r\n * @returns Send transaction result\r\n */\r\n public async BroadCastTransaction(transaction: string): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].apiType == 'blockbook') {\r\n try {\r\n const result = await BlockbookServer.BroadcastTransaction(this._servers[i], transaction);\r\n if (result.result) {\r\n return {\r\n isSuccess: true,\r\n txid: result.result,\r\n };\r\n } else if (result.error) {\r\n return {\r\n isSuccess: false,\r\n error: result.error,\r\n };\r\n } else {\r\n MyConsole.Info(\r\n 'BitcoinBlockchain::BroadCastTransaction->Send transaction neither have result or error'\r\n );\r\n return {\r\n isSuccess: false,\r\n error: 'Send transaction neither have result or error',\r\n };\r\n }\r\n } catch (e) {\r\n MyConsole.Exception('BitcoinBlockchain::BroadCastTransaction->', e);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::BroadCastTransaction->No server to handle the request');\r\n }\r\n\r\n public async GetZcashChainId(): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].apiType == 'blockbook') {\r\n try {\r\n const result = await BlockbookServer.GetZcashChainId(this._servers[i]);\r\n if (result.backend && result.backend.consensus) {\r\n return {\r\n chaintip: result.backend.consensus.chaintip,\r\n nextblock: result.backend.consensus.nextblock,\r\n };\r\n } else MyConsole.Exception('BitcoinBlockchain::GetZcashChainId->Blockbook error');\r\n } catch (e) {\r\n MyConsole.Exception('BitcoinBlockchain::GetZcashChainId->', e);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::GetZcashChainId->No server to handle the request');\r\n }\r\n\r\n public async GetTxFee(isBitcoin: boolean): Promise {\r\n //! fetch/update the fee rate every 1 minutes\r\n const secondsPassedFromLastCall = (new Date().getTime() - this._lastFeeFetchTime.getTime()) / 1000;\r\n if (this._lastFee != null && secondsPassedFromLastCall < 60) {\r\n return this._lastFee;\r\n }\r\n\r\n if (isBitcoin == false) {\r\n return await this._getTxEstimatedFee();\r\n }\r\n\r\n try {\r\n var fee = {};\r\n // get fee from https://bitcoinfees.earn.com/api/v1/fees/list\r\n const client = newHttpClient();\r\n\r\n const request = new Request('https://bitcoinfees.earn.com/api/v1/fees/list', { method: 'GET' });\r\n var r = await client.execute(request);\r\n r.fees.forEach((element) => {\r\n if (\r\n (element.maxMinutes == 360 && fee.economy == null) ||\r\n (element.minMinutes < 180 && fee.economy == null)\r\n ) {\r\n fee.economy = element.minFee;\r\n } else if (\r\n (element.maxMinutes == 180 && fee.normal == null) ||\r\n (element.minMinutes < 90 && fee.normal == null)\r\n ) {\r\n fee.normal = element.minFee;\r\n } else if (\r\n (element.maxMinutes == 60 && fee.high == null) ||\r\n (element.minMinutes < 30 && fee.high == null)\r\n ) {\r\n fee.high = element.minFee;\r\n }\r\n });\r\n\r\n this._lastFee = fee;\r\n return fee;\r\n } catch {\r\n return this._getTxEstimatedFee();\r\n }\r\n }\r\n\r\n //**********************\r\n // PRIVATE FUNCTIONS\r\n //**********************\r\n private _ensureThereIsAServer() {\r\n if (this._servers == undefined || this._servers.length == 0) {\r\n throw new Error('BitcoinBlockchain::_ensureThereIsAServer->No server');\r\n }\r\n }\r\n\r\n private async _getTxEstimatedFee(): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n if (this._servers[i].apiType == 'blockbook') {\r\n try {\r\n let fee: WalletModel.BitcoinFee = {\r\n economy: 0,\r\n high: 0,\r\n normal: 0,\r\n };\r\n\r\n let res = await BlockbookServer.GetEstimateFee(this._servers[i], 1);\r\n if (res.result) {\r\n fee.high = +res.result * 100000; // satoshi per KB\r\n }\r\n\r\n res = await BlockbookServer.GetEstimateFee(this._servers[i], 3);\r\n if (res.result) {\r\n fee.normal = +res.result * 100000; // satoshi per KB\r\n }\r\n\r\n res = await BlockbookServer.GetEstimateFee(this._servers[i], 6);\r\n if (res.result) {\r\n fee.economy = +res.result * 100000; // satoshi per KB\r\n }\r\n\r\n this._lastFee = fee;\r\n return fee;\r\n } catch (e) {}\r\n }\r\n }\r\n\r\n throw new Error('BitcoinBlockchain::GetAccountInfoByPublicKey->No server to handle the request');\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { RequestAddressInfo } from \"../models/GenericWalletModel\";\r\nimport { BlockchainServerModel } from \"./BlockchainProviders\";\r\n\r\nexport abstract class BlockchainBase {\r\n _servers: BlockchainServerModel[];\r\n\r\n constructor(servers: BlockchainServerModel[]){\r\n this._servers = servers;\r\n }\r\n\r\n public abstract GetAddressInfo(reqAdd: RequestAddressInfo);\r\n public abstract BroadCastTransaction(transaction: string);\r\n}","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n *\r\n * Hadi Robati, hadi@prokey.io\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nconst _serverFileModel = require.resolve('../../data/BlockchainProviders.json');\r\ndelete require.cache[_serverFileModel];\r\nconst _providers = require('../../data/BlockchainProviders.json');\r\n\r\nimport { CoinBaseType } from '../coins/CoinInfo';\r\nimport { BaseCoinInfoModel, EthereumBaseCoinInfoModel } from '../models/CoinInfoModel';\r\nimport _publicProviders from '../../data/NetworkProviders.json';\r\n\r\nexport interface BlockchainServerModel {\r\n apiType: string;\r\n url: string;\r\n serverName: string;\r\n isSupportXpub?: boolean;\r\n}\r\n\r\n/**\r\n * Servers model in providers.json file\r\n */\r\ninterface ProviderServerModel {\r\n apiType: string;\r\n name: string;\r\n baseUrl: string;\r\n isSupportXpub?: boolean;\r\n}\r\n\r\n/**\r\n * Coins model in providers.json file\r\n */\r\ninterface ProviderCoinModel {\r\n type: number;\r\n name: string;\r\n shortcut: string;\r\n chainId?: number;\r\n servers: [\r\n {\r\n name: string;\r\n urlAffix?: string;\r\n type: string;\r\n }\r\n ];\r\n}\r\n\r\nexport class BlockchainProviders {\r\n public static Get(coinInfo: BaseCoinInfoModel): BlockchainServerModel[] {\r\n let coins: ProviderCoinModel[] = _providers.coins;\r\n let allServers: ProviderServerModel[] = _providers.servers;\r\n\r\n if (coins == undefined || allServers == undefined) {\r\n throw new Error('Error in reading providers.json file');\r\n }\r\n\r\n // CoinName\r\n const cn = coinInfo.name.toLocaleLowerCase();\r\n\r\n // Coin shortcut\r\n const cs = coinInfo.shortcut.toLocaleLowerCase();\r\n\r\n let coin: ProviderCoinModel | undefined;\r\n\r\n // serveral servers can be supported\r\n let servers: BlockchainServerModel[] = [];\r\n\r\n // The matching algorithm can be defferent based on coin type\r\n switch (coinInfo.coinBaseType) {\r\n // For bitcoin based\r\n case CoinBaseType.BitcoinBase:\r\n // find the coin in providers\r\n coin = coins.find(\r\n (c) => c.type == CoinBaseType.BitcoinBase && (c.name.toLowerCase() == cn || c.shortcut == cs)\r\n );\r\n break;\r\n case CoinBaseType.EthereumBase:\r\n case CoinBaseType.ERC20:\r\n // find the coin in providers\r\n coin = coins.find(\r\n (c) =>\r\n c.type == coinInfo.coinBaseType && c.chainId == (coinInfo as EthereumBaseCoinInfoModel).chain_id\r\n );\r\n break;\r\n case CoinBaseType.OMNI:\r\n // We support OMNI on Bitcoin network\r\n coin = coins.find(\r\n (c) =>\r\n c.type == CoinBaseType.BitcoinBase && (c.name.toLowerCase() == 'bitcoin' || c.shortcut == 'BTC')\r\n );\r\n break;\r\n case CoinBaseType.NEM:\r\n break;\r\n case CoinBaseType.Stellar:\r\n break;\r\n case CoinBaseType.Ripple:\r\n // find the coin in providers\r\n coin = coins.find((c) => c.type == CoinBaseType.Ripple);\r\n break;\r\n }\r\n\r\n // not supported or no server!\r\n if (coin == undefined || coin.servers == undefined) return [];\r\n\r\n // for all available servers for this coin(at least one should be there)\r\n coin.servers.forEach((coinServer) => {\r\n // find the specific server\r\n const s = allServers.find((s) => s.name == coinServer.name);\r\n if (s != undefined) {\r\n switch (s.apiType) {\r\n case 'geth':\r\n const publicProvider = _publicProviders.find((item) => item.chainId == coin?.chainId);\r\n if (publicProvider) {\r\n publicProvider.url.forEach((url) => {\r\n servers.push({ apiType: s.apiType, serverName: s.name, url });\r\n });\r\n }\r\n break;\r\n case 'blockbook':\r\n case 'fullnode':\r\n // add prefix to url if any\r\n let url: string = s.baseUrl;\r\n if (coinServer.urlAffix) {\r\n const searchRegExp = new RegExp('{a}', 'g');\r\n url = url.replace(searchRegExp, coinServer.urlAffix);\r\n }\r\n\r\n // push to list\r\n servers.push({\r\n apiType: s.apiType,\r\n serverName: s.name,\r\n url: url,\r\n isSupportXpub: s.isSupportXpub,\r\n });\r\n break;\r\n }\r\n }\r\n });\r\n\r\n return servers;\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { BlockchainBase } from './BlockchainBase';\r\nimport * as WalletModel from '../models/EthereumWalletModel';\r\nimport { BlockchainServerModel } from './BlockchainProviders';\r\nimport { BlockbookServer } from './_servers/blockbook/BlockbookServer';\r\nimport { BlockbookDetails, BlockbookRequestDetails } from './_servers/blockbook/BlockbookRequestModels';\r\nimport { MyConsole } from '../utils/console';\r\nimport { AddressModel } from '../models/Prokey';\r\nimport * as GenericWalletModel from '../models/GenericWalletModel';\r\nimport * as BlockbookModels from './_servers/blockbook/BlockbookEthereumModel';\r\nimport { GetGasParams } from '../utils/ethereum-providers';\r\nimport { FeeData } from '@ethersproject/providers';\r\nimport PublicEthereumServer from './_servers/public/PublicEthereumServer';\r\nimport { Erc20BaseCoinInfoModel, EthereumBaseCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { BlockbookTransactionResult } from './_servers/blockbook/BlockbookCommonModel';\r\n\r\nexport class EthereumBlockchain extends BlockchainBase {\r\n private _isErc20: boolean;\r\n private _coinInfo?: Erc20BaseCoinInfoModel | EthereumBaseCoinInfoModel;\r\n\r\n constructor(\r\n servers: BlockchainServerModel[],\r\n isErc20 = false,\r\n coinInfo?: Erc20BaseCoinInfoModel | EthereumBaseCoinInfoModel\r\n ) {\r\n super(servers);\r\n\r\n this._isErc20 = isErc20;\r\n this._coinInfo = coinInfo;\r\n }\r\n\r\n /**\r\n * Get address info\r\n * @param reqAdd The address\r\n * @returns Bitcoin Address Info\r\n */\r\n public async GetAddressInfo(reqAdd: AddressModel): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n switch (this._servers[i].apiType) {\r\n case 'blockbook':\r\n const req = new BlockbookRequestDetails();\r\n req.details = BlockbookDetails.Txs;\r\n\r\n try {\r\n let addInfo: WalletModel.EthereumAccountInfo =\r\n await BlockbookServer.GetAddressInfo(\r\n this._servers[i],\r\n reqAdd.address,\r\n req\r\n );\r\n\r\n //! Add address model\r\n addInfo.addressModel = reqAdd;\r\n\r\n return addInfo;\r\n } catch (e) {\r\n MyConsole.Exception('EthereumBlockchain::GetAddressInfo->', e);\r\n }\r\n break;\r\n case 'geth':\r\n try {\r\n let providerResponse: WalletModel.EthereumAccountInfo =\r\n await PublicEthereumServer.GetAddressInfo(\r\n this._servers[i],\r\n reqAdd.address,\r\n this._isErc20,\r\n this._coinInfo\r\n );\r\n providerResponse.addressModel = reqAdd;\r\n return providerResponse;\r\n } catch (e) {\r\n MyConsole.Exception('EthereumBlockchain::GetAddressInfo->', e);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('EthereumBlockchain::GetAddressInfo->No server to handle the request');\r\n }\r\n\r\n public async GetFeeData(chainId: number): Promise {\r\n return await GetGasParams(chainId);\r\n }\r\n\r\n public async BroadCastTransaction(transaction: string): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n let result: BlockbookTransactionResult | undefined;\r\n try {\r\n switch (this._servers[i].apiType) {\r\n case 'blockbook':\r\n result = await BlockbookServer.BroadcastTransaction(this._servers[i], transaction);\r\n break;\r\n case 'geth':\r\n result = await PublicEthereumServer.BroadcastTransaction(this._servers[i], transaction);\r\n }\r\n\r\n if (!result) {\r\n return {\r\n isSuccess: false,\r\n error: 'Send transaction neither have result or error',\r\n };\r\n }\r\n\r\n if (result.result) {\r\n return {\r\n isSuccess: true,\r\n txid: result.result,\r\n };\r\n } else if (result.error) {\r\n return {\r\n isSuccess: false,\r\n error: result.error,\r\n };\r\n } else {\r\n MyConsole.Info(\r\n 'EthereumBlockchain::BroadCastTransaction->Send transaction neither have result or error'\r\n );\r\n return {\r\n isSuccess: false,\r\n error: 'Send transaction neither have result or error',\r\n };\r\n }\r\n } catch (e) {\r\n MyConsole.Exception('EthereumBlockchain::BroadCastTransaction->', e);\r\n }\r\n }\r\n\r\n throw new Error('EthereumBlockchain::BroadCastTransaction->No server to handle the request');\r\n }\r\n\r\n //**********************\r\n // PRIVATE FUNCTIONS\r\n //**********************\r\n private _ensureThereIsAServer() {\r\n if (this._servers == undefined || this._servers.length == 0) {\r\n throw new Error('EthereumBlockchain::_ensureThereIsAServer->No server');\r\n }\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { BlockchainProviders, BlockchainServerModel } from './BlockchainProviders';\r\nimport { BlockchainBase } from './BlockchainBase';\r\nimport { BaseCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { RippleServer } from './_servers/ripple/RippleRpcServer';\r\nimport { MyConsole } from '../utils/console';\r\nimport { AddressModel } from '../models/Prokey';\r\nimport * as WalletModel from '../models/RippleWalletModel';\r\n\r\ntype ProcessServersCallBack = (server: BlockchainServerModel) => Promise;\r\ntype ProcessServersError = (error: any) => void;\r\n\r\nexport class RippleBlockchain extends BlockchainBase {\r\n constructor(coinInfo: BaseCoinInfoModel) {\r\n const servers: Array = BlockchainProviders.Get(coinInfo);\r\n super(servers);\r\n }\r\n\r\n public async GetAddressInfo(reqAdd: AddressModel): Promise {\r\n this._ensureThereIsAServer();\r\n\r\n for (let i = 0; i < this._servers.length; i++) {\r\n try {\r\n // Get account data from ripple server\r\n let res = await RippleServer.GetAddressInfo(this._servers[i], reqAdd.address);\r\n if (res.status == 'success') {\r\n if (res.account_data == null) {\r\n throw new Error('Status is success but there is no account_data');\r\n }\r\n\r\n // return received data\r\n return {\r\n ...res.account_data,\r\n isAccountFounded: true,\r\n addressModel: reqAdd,\r\n };\r\n } else {\r\n // If this account/address is not available, the server returns \"Account not found.\" with following data:\r\n // \"error\": \"actNotFound\"\r\n // \"error_code\": 19,\r\n // \"error_message\": \"Account not found.\",\r\n // in this case, An empty account info with \"isAccountFounded: false\" flag will be retuned\r\n if (res.error == 'actNotFound') {\r\n return {\r\n isAccountFounded: false,\r\n addressModel: reqAdd,\r\n };\r\n }\r\n\r\n // If there is any error message\r\n if (res.error_message) {\r\n throw new Error(res.error_message);\r\n }\r\n }\r\n } catch (e) {\r\n MyConsole.Exception('RippleBlockchain::GetAddressInfo->', e);\r\n }\r\n }\r\n\r\n throw new Error('RippleBlockchain::GetAddressInfo->Request has error');\r\n }\r\n\r\n public async BroadCastTransaction(transaction: string): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n try {\r\n let res = await RippleServer.BroadCastTransaction(this._servers[i], transaction);\r\n if (res.status == 'success') {\r\n return res;\r\n } else {\r\n // If there is any error message\r\n if (res.error_message) {\r\n throw new Error(res.error_message);\r\n } else {\r\n throw new Error('Unknown server error');\r\n }\r\n }\r\n } catch (e) {\r\n MyConsole.Exception('RippleBlockchain::BroadCastTransaction->', e);\r\n }\r\n }\r\n\r\n throw new Error('RippleBlockchain::BroadCastTransaction->Request has error');\r\n }\r\n\r\n /**\r\n * Get Account transactions\r\n * @param account The account address\r\n * @param limit Max number of transaction to retrive\r\n * @returns An array of Ripple Transaction\r\n */\r\n async GetAccountTransactions(\r\n account: string,\r\n limit: number = 10\r\n ): Promise> {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n try {\r\n let res = await RippleServer.GetAccountTransactions(this._servers[i], account, limit);\r\n if (res.status == 'success') {\r\n if (res.transactions == null) {\r\n throw new Error('Status is success but there is no transaction data');\r\n }\r\n\r\n return res.transactions;\r\n } else {\r\n // If there is any error message\r\n if (res.error_message) {\r\n throw new Error(res.error_message);\r\n } else {\r\n throw new Error('Unknown server error');\r\n }\r\n }\r\n } catch (e) {\r\n MyConsole.Exception('RippleBlockchain::GetAccountTransactions->', e);\r\n }\r\n }\r\n\r\n throw new Error('RippleBlockchain::GetAccountTransactions->Request has error');\r\n }\r\n\r\n async GetFee(): Promise {\r\n this._ensureThereIsAServer();\r\n for (let i = 0; i < this._servers.length; i++) {\r\n try {\r\n let res = await RippleServer.GetCurrentFee(this._servers[i]);\r\n if (res.status == 'success') {\r\n return res;\r\n } else {\r\n // If there is any error message\r\n if (res.error_message) {\r\n throw new Error(res.error_message);\r\n } else {\r\n throw new Error('Unknown server error');\r\n }\r\n }\r\n } catch (e) {\r\n MyConsole.Exception('RippleBlockchain::GetFee->', e);\r\n }\r\n }\r\n\r\n throw new Error('RippleBlockchain::GetAddressInfo->Request has error');\r\n }\r\n\r\n private async foreachServer(\r\n callback: ProcessServersCallBack,\r\n errorCallback: ProcessServersError\r\n ): Promise {\r\n for (const server of this._servers) {\r\n try {\r\n return await callback(server);\r\n } catch (e: any) {\r\n errorCallback(e);\r\n }\r\n }\r\n throw new Error('there is no provider that respond to this request');\r\n }\r\n\r\n private _ensureThereIsAServer() {\r\n if (this._servers == undefined || this._servers.length == 0) {\r\n throw new Error('RippleBlockchain::_ensureThereIsAServer->No server');\r\n }\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n *\r\n * Hadi Robati, hadi@prokey.io\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { Request, newHttpClient } from 'typescript-http-client';\r\n\r\nexport abstract class BaseBlockchainServer {\r\n /**\r\n * Get account info from blockchain node\r\n * @param publicKeyOrAddress Public key(XPUB, YPUB or ZPUB) or address(account base wallets)\r\n */\r\n //public abstract GetAccount(publicKeyOrAddress: string) : Promise;\r\n\r\n /**\r\n * This is a private helper function to GET data from server\r\n * @param url URL + data\r\n * @param changeJson a callback for adjust json before casting\r\n */\r\n protected static async GetFromServer(url: string, changeJson?: (json: string) => string) {\r\n const client = newHttpClient();\r\n\r\n const request = new Request(url, { method: 'GET' });\r\n\r\n return await client.execute(request);\r\n }\r\n\r\n /**\r\n * This is a private helper function to POST data to server\r\n * @param url URL\r\n * @param body Request Body\r\n * @returns Response data from server\r\n */\r\n protected static async PostToServer(url: string, body: any): Promise {\r\n const client = newHttpClient();\r\n\r\n const request = new Request(url, { body: body, method: 'POST' });\r\n\r\n return await client.execute(request);\r\n }\r\n\r\n /**\r\n * This is a private helper function to call a Json RPC method\r\n * @param url Server URL\r\n * @param method The method name to be called\r\n * @param params Params to be passed to method\r\n * @returns Call response\r\n */\r\n protected static async JsonRpcV2Request(url: string, method: string, params: any): Promise {\r\n const client = newHttpClient();\r\n const request = new Request(\r\n url, // server URL\r\n {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n jsonrpc: '2.0',\r\n method: method,\r\n params: [params],\r\n id: 1,\r\n }),\r\n }\r\n );\r\n\r\n return await client.execute(request);\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\n/**\r\n * Specifies level of details returned by request\r\n */\r\n export enum BlockbookDetails {\r\n Basic='basic', \r\n Tokens='tokens',\r\n TokenBalances='tokenBalances',\r\n Txids='txids',\r\n Txs='txs',\r\n Txslight='txslight',\r\n}\r\n\r\n/**\r\n * Specifies what tokens (xpub addresses) are returned by the request\r\n */\r\nexport enum BlockbookTokens {\r\n Nonzero='nonzero',\r\n Used='used',\r\n Derived='derived',\r\n}\r\n\r\n/**\r\n * The request details\r\n */\r\nexport class BlockbookRequestDetails {\r\n // specifies level of details returned by request\r\n public details = BlockbookDetails.Basic; \r\n\r\n // specifies what tokens (xpub addresses) are returned by the request\r\n public tokens = BlockbookTokens.Nonzero; \r\n\r\n // specifies page of returned transactions, starting from 1. If out of range, Blockbook returns the closest possible page.\r\n public page = 1; \r\n\r\n // number of transactions returned by call (default and maximum 1000)\r\n public pageSize = 1000;\r\n\r\n // filter of the returned transactions from block height (default no filter)\r\n public from?: number; \r\n\r\n // filter of the returned transactions to block height (default no filter)\r\n public to?: number; \r\n}","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { BlockchainServerModel } from \"../../BlockchainProviders\";\r\nimport { BaseBlockchainServer } from \"../BaseBlockchainServer\";\r\nimport { BitcoinAccountInfoModel, BitcoinAddressInfoModel, BitcoinTransactionDetailInfoModel, BitcoinTransactionInfoModel, BitcoinUtxoModel, BlockbookStatusModel } from \"./BlockbookBitcoinModel\";\r\nimport { BlockbookRequestDetails } from \"./BlockbookRequestModels\";\r\nimport { BlockbookFeeModel, BlockbookTransactionResult } from \"./BlockbookCommonModel\"\r\n\r\nexport class BlockbookServer extends BaseBlockchainServer {\r\n \r\n private _lastFeeFetchTime: Date = new Date();\r\n\r\n constructor() {\r\n super();\r\n\r\n // Initial time to yesterday\r\n this._lastFeeFetchTime.setDate(this._lastFeeFetchTime.getDate() - 1);\r\n }\r\n\r\n /**\r\n * Get bitcoin account using public key\r\n * @param server Server Model\r\n * @param publicKey publicKey in XPUB/YPUB/ZPUB format\r\n * @param details level of details\r\n * @returns \r\n */\r\n public static async GetAccount(server: BlockchainServerModel, publicKey: string, details?: BlockbookRequestDetails): Promise {\r\n const url = `${server.url}/xpub/${publicKey}` + this._getReqParams(details);\r\n \r\n let res = await this.GetFromServer(url);\r\n return res;\r\n }\r\n\r\n /**\r\n * Get information about an address\r\n * @param server Server Model\r\n * @param address address\r\n * @param details level of details\r\n */\r\n public static async GetAddressInfo(server: BlockchainServerModel, address: string, details?: BlockbookRequestDetails): Promise {\r\n const url = `${server.url}/address/${address}` + this._getReqParams(details);\r\n\r\n return await this.GetFromServer(url);\r\n }\r\n\r\n /**\r\n * Get list of unspent transactions\r\n * @param server Server model\r\n * @param addressOrPublicKey Address or publickey\r\n * @returns list of Utxo\r\n */\r\n public static async GetUtxo(server: BlockchainServerModel, addressOrPublicKey: string): Promise {\r\n const url = `${server.url}/utxo/${addressOrPublicKey}`;\r\n\r\n return await this.GetFromServer(url);\r\n }\r\n\r\n /**\r\n * Get transaction info from server\r\n * @param server Server model\r\n * @param txid Transaction id\r\n * @returns Transaction info\r\n */\r\n public static async GetTransaction(server: BlockchainServerModel, txid: string): Promise {\r\n const url = `${server.url}/tx/${txid}`;\r\n\r\n return await this.GetFromServer(url);\r\n }\r\n\r\n /**\r\n * \r\n * @param server Server model\r\n * @param txid Transaction id\r\n * @returns transaction data in the exact format as returned by backend\r\n */\r\n public static async GetRawTransaction(server: BlockchainServerModel, txid: string): Promise {\r\n const url = `${server.url}/tx-specific/${txid}`;\r\n\r\n return await this.GetFromServer(url);\r\n }\r\n\r\n /**\r\n * Send new transaction to network\r\n * @param server Server model\r\n * @param transaction Signed transaction\r\n * @returns Broadcast result\r\n */\r\n public static async BroadcastTransaction(server: BlockchainServerModel, transaction: string): Promise {\r\n const url = `${server.url}/sendtx/${transaction}`;\r\n\r\n return await this.GetFromServer(url);\r\n }\r\n\r\n /**\r\n * Estimate transaction fee\r\n * @param server Server model\r\n * @param numberOfBlocks desire blocknumber\r\n * @returns Fee model (per BTC)\r\n */\r\n public static async GetEstimateFee(server: BlockchainServerModel, numberOfBlocks: number): Promise {\r\n const url = `${server.url}/estimatefee/${numberOfBlocks}`;\r\n\r\n return await this.GetFromServer(url);\r\n }\r\n\r\n public static async GetZcashChainId(server: BlockchainServerModel) {\r\n const url = `${server.url}`;\r\n\r\n return await this.GetFromServer(url);\r\n }\r\n\r\n //******************************\r\n // PRIVATE FUNCTIONS\r\n //******************************\r\n /**\r\n * serialize parameters\r\n * @param details \r\n * @returns \r\n */\r\n private static _getReqParams(details?: BlockbookRequestDetails): string {\r\n if(details == null)\r\n return '';\r\n \r\n let p = `?page=${details.page}&pagesize=${details.pageSize}&details=${details.details}&tokens=${details.tokens}`;\r\n\r\n if(details.from)\r\n p += `&from=${details.from}`;\r\n\r\n if(details.to)\r\n p += `&to=${details.to}`;\r\n\r\n return p;\r\n }\r\n}","import { FeeData, JsonRpcProvider } from '@ethersproject/providers';\r\nimport { BlockchainServerModel } from '../../BlockchainProviders';\r\nimport * as WalletModel from '../../../models/EthereumWalletModel';\r\nimport { Erc20BaseCoinInfoModel, EthereumBaseCoinInfoModel } from '../../../models/CoinInfoModel';\r\nimport { Contract } from '@ethersproject/contracts';\r\nimport ERC20_ABI from '../../../../data/erc20.abi.json';\r\nimport { GetGasParams } from '../../../utils/ethereum-providers';\r\nimport { BlockbookTransactionResult } from '../blockbook/BlockbookCommonModel';\r\n\r\nclass PublicEthereumServer {\r\n static async GetAddressInfo(\r\n server: BlockchainServerModel,\r\n address: string,\r\n isErc20: boolean,\r\n coinInfo: Erc20BaseCoinInfoModel | EthereumBaseCoinInfoModel | undefined\r\n ): Promise {\r\n const provider = new JsonRpcProvider(server.url);\r\n\r\n let balance = '0';\r\n let tokenBalance = '0';\r\n if (isErc20) {\r\n const erc20CoinInfo = coinInfo as Erc20BaseCoinInfoModel;\r\n const contract = new Contract(erc20CoinInfo.address, ERC20_ABI, provider);\r\n const addressBalance = (await contract.balanceOf(address)).toString();\r\n tokenBalance = addressBalance;\r\n }\r\n balance = (await provider.getBalance(address)).toString();\r\n const nonce = (await provider.getTransactionCount(address)).toString(16);\r\n\r\n const accInfo: WalletModel.EthereumAccountInfo = {\r\n address,\r\n balance: isErc20 ? tokenBalance : balance,\r\n nonce,\r\n unconfirmedBalance: '0',\r\n nonTokenTxs: 0,\r\n txs: 0,\r\n unconfirmedTxs: 0,\r\n transactions: [],\r\n isDirectQueryFromGeth: true,\r\n };\r\n if (isErc20) {\r\n accInfo.ethBalance = balance;\r\n }\r\n return accInfo;\r\n }\r\n\r\n public async GetFeeData(chainId: number): Promise {\r\n return await GetGasParams(chainId);\r\n }\r\n\r\n public static async BroadcastTransaction(\r\n server: BlockchainServerModel,\r\n transaction: string\r\n ): Promise {\r\n const provider = new JsonRpcProvider(server.url);\r\n try {\r\n const txResult = await provider.sendTransaction(transaction);\r\n return {\r\n result: txResult.hash,\r\n };\r\n } catch (e: any) {\r\n return {\r\n error: e.reason,\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport default PublicEthereumServer;\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) 2022 Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { BaseBlockchainServer } from '../BaseBlockchainServer';\r\nimport { BlockchainServerModel } from '../../BlockchainProviders';\r\nimport {\r\n RippleAccountInfoResponse,\r\n RippleFeeResponse,\r\n RippleAccountTxResponse,\r\n RippleSubmitTransactionResponse,\r\n} from './RippleRpcModel';\r\n\r\nexport class RippleServer extends BaseBlockchainServer {\r\n /**\r\n * Get information about an address\r\n * @param server Server Model\r\n * @param address address\r\n */\r\n public static async GetAddressInfo(server: BlockchainServerModel, address: string): Promise {\r\n const res = await this.JsonRpcV2Request(\r\n server.url, // Server URL\r\n 'account_info', // method\r\n {\r\n // params\r\n account: address,\r\n strict: true,\r\n ledger_index: 'current',\r\n queue: false,\r\n }\r\n );\r\n\r\n if (res == null || res.result == null) {\r\n Promise.reject('Not a valid response from the server');\r\n }\r\n\r\n return res.result;\r\n }\r\n\r\n /**\r\n * Broadcasting the transaction\r\n * @param server Server Model\r\n * @param data Signed data to be broadcasted to network\r\n * @returns\r\n */\r\n public static async BroadCastTransaction(\r\n server: BlockchainServerModel,\r\n data: string\r\n ): Promise {\r\n const res = await this.JsonRpcV2Request(\r\n server.url, // Server URL\r\n 'submit', // method\r\n {\r\n // params\r\n tx_blob: data,\r\n }\r\n );\r\n\r\n return res.result;\r\n }\r\n\r\n /**\r\n * Getting list of transaction info\r\n * @param server Server Model\r\n * @param account Account address\r\n * @param limit Number of transactions\r\n * @returns List of ripple transaction data\r\n */\r\n public static async GetAccountTransactions(\r\n server: BlockchainServerModel,\r\n account: string,\r\n limit: number = 10\r\n ): Promise {\r\n const res = await this.JsonRpcV2Request(\r\n server.url, // Server URL\r\n 'account_tx', // method\r\n {\r\n // params\r\n account: account,\r\n binary: false,\r\n forward: false,\r\n ledger_index_max: -1,\r\n ledger_index_min: -1,\r\n limit: limit\r\n }\r\n );\r\n\r\n if (res == null || res.result == null) {\r\n Promise.reject('Not a valid response from the server');\r\n }\r\n\r\n return res.result;\r\n }\r\n\r\n /**\r\n * Getting current fee\r\n * @returns Ripple Fee\r\n */\r\n public static async GetCurrentFee(server: BlockchainServerModel): Promise {\r\n const res = await this.JsonRpcV2Request(\r\n server.url, // Server URL\r\n 'fee', // method\r\n {} // no param needed\r\n );\r\n\r\n if (res == null || res.result == null) {\r\n Promise.reject('Not a valid response from the server');\r\n }\r\n\r\n return res.result;\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n *\r\n * Hadi Robati, hadi@prokey.io\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport {\r\n BitcoinBaseCoinInfoModel,\r\n EthereumBaseCoinInfoModel,\r\n Erc20BaseCoinInfoModel,\r\n MiscCoinInfoModel,\r\n OmniCoinInfoModel,\r\n RippleCoinInfoModel,\r\n NemCoinInfoModel,\r\n} from \"../models/CoinInfoModel\";\r\n\r\n import * as EthereumNetworks from \"../utils/ethereum-networks\";\r\n\r\nconst compareVersions = require('compare-versions');\r\n\r\nconst modelName = require.resolve(\"../../data/ProkeyCoinsInfo.json\");\r\ndelete require.cache[modelName];\r\nconst ProkeyCoinInfoModel = require(\"../../data/ProkeyCoinsInfo.json\");\r\n\r\nexport enum CoinBaseType {\r\n BitcoinBase,\r\n EthereumBase,\r\n ERC20,\r\n NEM,\r\n OMNI,\r\n Ripple,\r\n Stellar,\r\n OTHERS\r\n}\r\n\r\nexport interface CoinNameModel {\r\n Name: string;\r\n Shortcut: string;\r\n Type: CoinBaseType;\r\n Priority: Number;\r\n ContractAddress: string;\r\n Decimals: number;\r\n ChainOrPropertyId?: number;\r\n}\r\n\r\nexport class CoinInfo {\r\n\r\n /**\r\n * This function will return the CoinInfo by coinName and type\r\n * @param coinName The coin name or shortcut\r\n * @param coinType Which coin type are you looking for? BitcoinBase, ERC20 or Ethereum.\r\n * @param chainOrPropertyId For Ethereum or OMNI, this property can be used instead of name if set.\r\n */\r\n public static Get(coinName: string, coinType: CoinBaseType, chainOrPropertyId?: number): T {\r\n if (coinType == undefined)\r\n throw new Error();\r\n\r\n if(coinType == CoinBaseType.ERC20 && coinName.length <= 0 ) {\r\n throw new Error(\"You have to provide Contract Address for ERC20 tokens\");\r\n } else if( (coinType == CoinBaseType.EthereumBase || coinType == CoinBaseType.OMNI) && coinName.length == 0 && chainOrPropertyId == null) {\r\n throw new Error(\"No Chain ID or coin name provided\");\r\n }\r\n\r\n let c: any;\r\n switch (coinType) {\r\n case CoinBaseType.BitcoinBase:\r\n c = ProkeyCoinInfoModel.bitcoin;\r\n break;\r\n case CoinBaseType.EthereumBase:\r\n c = ProkeyCoinInfoModel.eth;\r\n break;\r\n case CoinBaseType.ERC20:\r\n c = ProkeyCoinInfoModel.erc20;\r\n break;\r\n case CoinBaseType.OMNI:\r\n c = ProkeyCoinInfoModel.omni;\r\n break;\r\n case CoinBaseType.Ripple:\r\n c = ProkeyCoinInfoModel.ripple;\r\n break;\r\n case CoinBaseType.NEM:\r\n c = ProkeyCoinInfoModel.NEM;\r\n break;\r\n }\r\n\r\n let f = coinName.toLowerCase();\r\n\r\n let ci: any;\r\n\r\n switch(coinType){\r\n case CoinBaseType.BitcoinBase:\r\n ci = c.find(obj => obj.name.toLowerCase() == f || obj.shortcut.toLowerCase() == f);\r\n\r\n ci.id = `btc_${ci.shortcut}`;\r\n break;\r\n case CoinBaseType.EthereumBase:\r\n if(chainOrPropertyId != null) {\r\n ci = c.find( token => token.chain_id == chainOrPropertyId);\r\n } else {\r\n ci = c.find(obj => obj.name.toLowerCase() == f || obj.shortcut.toLowerCase() == f);\r\n }\r\n\r\n ci.id = `eth_${ci.shortcut}`;\r\n break;\r\n case CoinBaseType.ERC20:\r\n ci = c.find(obj => obj.address.toLowerCase() == f || obj.name.toLowerCase() == f || obj.shortcut.toLowerCase() == f);\r\n\r\n ci.id = `erc20_${EthereumNetworks.GetNetworkByChainId(ci.chain_id)}_${ci.shortcut}`;\r\n ci.slip44 = EthereumNetworks.GetSlip44ByChainId(ci.chain_id);\r\n break;\r\n case CoinBaseType.OMNI:\r\n if(chainOrPropertyId != null) {\r\n ci = c.find( token => token.proparty_id == chainOrPropertyId);\r\n } else {\r\n ci = c.find(obj => obj.name.toLowerCase() == f || obj.shortcut.toLowerCase() == f);\r\n }\r\n\r\n // Update the divisible\r\n ci.decimals = ci.divisible ? 8 : 0;\r\n \r\n ci.id = `omni_${ci.shortcut}`;\r\n break;\r\n case CoinBaseType.Ripple:\r\n ci = c.find(obj => obj.name.toLowerCase() == f || obj.shortcut.toLowerCase() == f);\r\n\r\n ci.id = `ripple_${ci.shortcut}`;\r\n break;\r\n case CoinBaseType.NEM:\r\n ci = c.find(obj => obj.name.toLowerCase() == f || obj.shortcut.toLowerCase() == f);\r\n\r\n ci.id = `nem_${ci.shortcut}`;\r\n break;\r\n default:\r\n ci = c.find(obj => obj.name.toLowerCase() == f || obj.shortcut.toLowerCase() == f);\r\n\r\n ci.id = `unknown_${ci.shortcut}`;\r\n break;\r\n }\r\n\r\n if (ci)\r\n {\r\n ci.coinBaseType = coinType;\r\n return ci;\r\n }\r\n else\r\n throw new Error(`cannot find ${coinName}`);\r\n }\r\n\r\n /**\r\n * Returning the sorted list of all coins\r\n * @param firmwareVersion Specific Version of Prokey which support this coin\r\n */\r\n public static GetAllCoinsInfoByVersion(firmwareVersion: string): Array< BitcoinBaseCoinInfoModel |\r\n EthereumBaseCoinInfoModel |\r\n Erc20BaseCoinInfoModel |\r\n MiscCoinInfoModel |\r\n OmniCoinInfoModel |\r\n RippleCoinInfoModel |\r\n NemCoinInfoModel> {\r\n\r\n let list = new Array();\r\n\r\n //! For all bitcoin base coins\r\n ProkeyCoinInfoModel.bitcoin.forEach(coin => {\r\n //! Check the version\r\n if(compareVersions(firmwareVersion, coin.support.optimum) >= 0) {\r\n list.push({\r\n ...coin,\r\n coinBaseType: CoinBaseType.BitcoinBase,\r\n id: `btc_${coin.shortcut}`,\r\n })\r\n }\r\n });\r\n\r\n //! For all ethereum base coins\r\n ProkeyCoinInfoModel.eth.forEach(coin => {\r\n if(compareVersions(firmwareVersion, coin.support.optimum) >= 0) {\r\n list.push({\r\n ...coin,\r\n coinBaseType: CoinBaseType.EthereumBase,\r\n id: `eth_${coin.shortcut}`,\r\n });\r\n }\r\n });\r\n\r\n //! For all ERC20 tokens\r\n ProkeyCoinInfoModel.erc20.forEach(token => {\r\n if(compareVersions(firmwareVersion, token.support.optimum) >= 0) {\r\n list.push({\r\n ...token,\r\n coinBaseType: CoinBaseType.ERC20,\r\n id: `erc20_${EthereumNetworks.GetNetworkByChainId(token.chain_id)}_${token.shortcut}`,\r\n slip44: EthereumNetworks.GetSlip44ByChainId(token.chain_id),\r\n });\r\n }\r\n });\r\n\r\n //! For all OMNI tokens in support file\r\n ProkeyCoinInfoModel.omni.forEach(omni => {\r\n if(compareVersions(firmwareVersion, omni.support.optimum) >= 0) {\r\n list.push({\r\n ...omni,\r\n decimals: (omni.divisible) ? 8 : 0,\r\n coinBaseType: CoinBaseType.OMNI,\r\n id: `omni_${omni.shortcut}`,\r\n });\r\n }\r\n });\r\n\r\n //! For all Ripple base coins\r\n ProkeyCoinInfoModel.ripple.forEach(ripple => {\r\n //! Check the version\r\n if(compareVersions(firmwareVersion, ripple.support.optimum) >= 0) {\r\n list.push({\r\n ...ripple,\r\n coinBaseType: CoinBaseType.Ripple,\r\n id: `ripple_${ripple.shortcut}`,\r\n })\r\n }\r\n });\r\n\r\n //! For all Nem base coins\r\n ProkeyCoinInfoModel.NEM.forEach(nem => {\r\n //! Check the version\r\n if(compareVersions(firmwareVersion, nem.support.optimum) >= 0) {\r\n list.push({\r\n ...nem,\r\n coinBaseType: CoinBaseType.NEM,\r\n id: `nem_${nem.shortcut}`,\r\n })\r\n }\r\n });\r\n\r\n //! Sort the list by Priority\r\n list.sort((a, b) => {\r\n if (a.priority > b.priority)\r\n return 1;\r\n else if (a.priority < b.priority)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n\r\n return list;\r\n }\r\n static compareVersions(firmwareVersion, networkVersion) {\r\n return compareVersions(firmwareVersion, networkVersion);\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport * as ProkeyResponses from '../models/Prokey';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport * as Utility from '../utils/utils';\r\nimport { Device } from './Device';\r\nimport { GeneralResponse, GeneralErrors } from '../models/GeneralResponse';\r\nimport { ICoinCommands } from './ICoinCommand';\r\nimport { BitcoinTx, BitcoinSignTxParams } from '../models/BitcoinTx';\r\nimport { validateParams } from '../utils/paramsValidator';\r\nimport { MyConsole } from '../utils/console';\r\nimport { BitcoinBaseCoinInfoModel, OmniCoinInfoModel } from '../models/CoinInfoModel'\r\nimport { CoinInfo, CoinBaseType } from '../coins/CoinInfo';\r\nimport BigNumber from 'bignumber.js';\r\n\r\nexport class BitcoinCommands implements ICoinCommands {\r\n _bitcoinTx!: BitcoinTx;\r\n _signatures: Array = [];\r\n _serializedTx: string = '';\r\n _isSigning: boolean = false;\r\n _failedSignHandler: any;\r\n private _coinInfo: BitcoinBaseCoinInfoModel | OmniCoinInfoModel;\r\n\r\n constructor(coinNameOrShortcut: string = \"Bitcoin\", isOmni = false) {\r\n\r\n if(isOmni == false) {\r\n this._coinInfo = CoinInfo.Get(coinNameOrShortcut, CoinBaseType.BitcoinBase );\r\n } else {\r\n this._coinInfo = CoinInfo.Get(coinNameOrShortcut, CoinBaseType.OMNI );\r\n }\r\n\r\n\r\n if(this._coinInfo == null)\r\n {\r\n throw new Error(`Cannot load CoinInfo for ${coinNameOrShortcut}`);\r\n }\r\n }\r\n \r\n /**\r\n * Get Bitcoin/Litecoin and etc address\r\n * @param device Prokey device instance\r\n * @param path BIP path \r\n * @param showOnProkey true means show the address on device display\r\n */\r\n public async GetAddress(device: Device,\r\n path: Array | string,\r\n showOnProkey?: boolean): Promise {\r\n\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n let showDisplay = (showOnProkey == null) ? true : showOnProkey;\r\n\r\n // convert path to array of num\r\n let address_n: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n address_n = PathUtil.getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n\r\n } else {\r\n address_n = path;\r\n }\r\n\r\n const scriptType = PathUtil.GetScriptType(address_n);\r\n\r\n let param = {\r\n address_n: address_n,\r\n coin_name: this._coinInfo.on_device || this._coinInfo.name || 'Bitcoin',\r\n show_display: showDisplay,\r\n script_type: scriptType,\r\n }\r\n\r\n let res = await device.SendMessage('GetAddress', param, 'Address');\r\n\r\n return {\r\n address: res.address,\r\n path: address_n,\r\n };\r\n }\r\n \r\n /**\r\n * Get List of addresses, This function is useful in account discovery\r\n * @param device the prokey device instance\r\n * @param paths list of paths to retrive the addresses\r\n */\r\n public async GetAddresses(device: Device,\r\n paths: Array | string>): Promise> {\r\n\r\n if (device == null || paths == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n let lstAddress: Array = new Array();\r\n let lstPathN: Array> = new Array>();\r\n let lstScriptType: Array = new Array();\r\n\r\n // convert path to array of num\r\n paths.forEach(async (path) => \r\n {\r\n let pn: Array;\r\n if(typeof path == \"string\") {\r\n try {\r\n pn = PathUtil.getHDPath(path);\r\n }\r\n catch (e) {\r\n return { success: false, errorCode: GeneralErrors.PATH_NOT_VALID }\r\n }\r\n } \r\n else {\r\n pn = path;\r\n }\r\n\r\n // prepare list of paths\r\n lstPathN.push(pn);\r\n\r\n // prepare list of Input Script Types\r\n lstScriptType.push(PathUtil.IsSegwitPath(pn) ? ProkeyResponses.EnumInputScriptType.SPENDP2SHWITNESS : ProkeyResponses.EnumInputScriptType.SPENDADDRESS);\r\n });\r\n \r\n let i=0;\r\n\r\n for(i=0; i('GetAddress', param, 'Address');\r\n\r\n // Generate address model\r\n lstAddress.push({\r\n address: res.address,\r\n path: lstPathN[i],\r\n });\r\n\r\n }\r\n catch(e) {\r\n Promise.reject(e);\r\n }\r\n }\r\n\r\n return lstAddress;\r\n }\r\n \r\n /**\r\n * Get Public key\r\n * @param device The prokey device\r\n * @param path BIP path\r\n * @param showOnProkey true means show the public key on prokey display\r\n */\r\n public async GetPublicKey(device: Device,\r\n path: Array | string,\r\n showOnProkey?: boolean): Promise {\r\n\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n let showDisplay = (showOnProkey == null) ? true : showOnProkey;\r\n\r\n // convert path to array of num\r\n let address_n: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n address_n = PathUtil.getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n\r\n } else {\r\n address_n = path;\r\n }\r\n\r\n //! Get the script type\r\n //! Default or BIP44 => SPENDADDRESS\r\n //! BIP49 => SPENDP2SHWITNESS\r\n let scriptType = PathUtil.GetScriptType(address_n);\r\n\r\n let param = {\r\n address_n: address_n,\r\n coin_name: this._coinInfo.on_device || this._coinInfo.name || 'Bitcoin',\r\n show_display: showDisplay,\r\n script_type: scriptType,\r\n }\r\n\r\n return await device.SendMessage('GetPublicKey', param, 'PublicKey');\r\n }\r\n \r\n /**\r\n * sign a transaction\r\n * @param device Prokey device instance\r\n * @param bitcoinTransaction transaction to be signed \r\n */\r\n public async SignTransaction(device: Device, bitcoinTransaction: BitcoinTx): Promise {\r\n\r\n console.log(\"SignTransaction\", bitcoinTransaction);\r\n if(!device) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: \"BitcoinCommands::SignTransaction->parameter Device cannot be null\",\r\n }\r\n\r\n throw e;\r\n }\r\n\r\n if(!bitcoinTransaction) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: \"BitcoinCommands::SignTransaction->parameter bitcoinTransaction cannot be null\",\r\n }\r\n \r\n throw e;\r\n }\r\n\r\n // reject if already in signing\r\n if(this._isSigning) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.BUSY,\r\n errorMessage: \"BitcoinCommands::SignTransaction->Already in signig\",\r\n }\r\n \r\n throw e;\r\n }\r\n\r\n this._serializedTx = '';\r\n this._signatures = [];\r\n\r\n return new Promise(async (resolve, reject) => {\r\n\r\n this._isSigning = true;\r\n\r\n this._failedSignHandler = (reason: any) => {\r\n // \"this\" can be null if the user after signing a transaction, change the coin \r\n if(this != undefined)\r\n this._isSigning = false;\r\n\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n\r\n /*let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.SIGNING_FAILED,\r\n errorMessage: `BitcoinCommands::SignTransaction->${reason}`,\r\n }*/\r\n\r\n reject(`Signing transaction failed: ${reason.message}`);\r\n };\r\n\r\n // Validate the parameters\r\n try {\r\n // TODO: This validator needs test\r\n validateParams(bitcoinTransaction, [\r\n { name: 'coinName', type: 'string', obligatory: true },\r\n { name: 'inputs', type: 'array', obligatory: true },\r\n { name: 'outputs', type: 'array', obligatory: true },\r\n { name: 'refTxs', type: 'array', allowEmpty: true },\r\n { name: 'locktime', type: 'number' },\r\n { name: 'timestamp', type: 'number' },\r\n { name: 'version', type: 'number' },\r\n { name: 'expiry', type: 'number' },\r\n { name: 'overwintered', type: 'boolean' },\r\n { name: 'versionGroupId', type: 'number' },\r\n { name: 'branchId', type: 'number' },\r\n ]);\r\n\r\n\r\n //! If there is refTxs, Validate it\r\n // TODO: This validator needs test\r\n if (Object.prototype.hasOwnProperty.call(bitcoinTransaction, 'refTxs')) {\r\n if(bitcoinTransaction.refTxs){\r\n bitcoinTransaction.refTxs.forEach(tx => {\r\n validateParams(tx, [\r\n { name: 'hash', type: 'string', obligatory: true },\r\n { name: 'inputs', type: 'array', obligatory: true },\r\n { name: 'bin_outputs', type: 'array', obligatory: true },\r\n { name: 'version', type: 'number', obligatory: true },\r\n { name: 'lock_time', type: 'number', obligatory: true },\r\n { name: 'extra_data', type: 'string' },\r\n { name: 'timestamp', type: 'number' },\r\n { name: 'version_group_id', type: 'number' },\r\n ]);\r\n });\r\n }\r\n }\r\n\r\n //! Validate the inputs\r\n // TODO: This validator needs test\r\n // TODO: Validate multisig\r\n for (const input of bitcoinTransaction.inputs) {\r\n PathUtil.validatePath(input.address_n);\r\n const useAmount = PathUtil.IsSegwitPath(input.address_n);\r\n input.script_type = ProkeyResponses.EnumInputScriptType.SPENDADDRESS;\r\n if(useAmount){\r\n input.script_type = ProkeyResponses.EnumInputScriptType.SPENDP2SHWITNESS;\r\n }\r\n validateParams(input, [\r\n { name: 'prev_hash', type: 'string', obligatory: true },\r\n { name: 'prev_index', type: 'number', obligatory: true },\r\n //{ name: 'script_type', type: 'string' },\r\n { name: 'amount', type: 'string', obligatory: useAmount },\r\n { name: 'sequence', type: 'number' },\r\n { name: 'multisig', type: 'object' },\r\n ]);\r\n }\r\n\r\n\r\n let totalOutputAmount : BigNumber = new BigNumber(0);\r\n //! Validate outputs\r\n for (const output of bitcoinTransaction.outputs) {\r\n validateParams(output, [\r\n { name: 'address_n', type: 'array' },\r\n { name: 'address', type: 'string' },\r\n { name: 'amount', type: 'string' },\r\n { name: 'op_return_data', type: 'array' },\r\n { name: 'multisig', type: 'object' },\r\n ]);\r\n\r\n if (Object.prototype.hasOwnProperty.call(output, 'address_n') && Object.prototype.hasOwnProperty.call(output, 'address')) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: 'Cannot use address and address_n in one output',\r\n }\r\n throw e;\r\n }\r\n\r\n // If there is amout in output, we need to check if it's less than dust_limit\r\n // now we sum all output's amount\r\n if(Object.prototype.hasOwnProperty.call(output, 'amount') && !Object.prototype.hasOwnProperty.call(output, 'op_return_data')) {\r\n totalOutputAmount = totalOutputAmount.plus(typeof output.amount === 'string' ? output.amount : '0');\r\n }\r\n\r\n\r\n // TODO Validate output address\r\n // if (output.hasOwnProperty(\"address_n\")) {\r\n // const scriptType = PathUtil.getOutputScriptType(output.address_n);\r\n // if (output.script_type !== scriptType){\r\n // let e: GeneralResponse = {\r\n // success: false,\r\n // errorCode: GeneralErrors.INVALID_PARAM,\r\n // errorMessage: `Output change script_type should be set to ${scriptType}`,\r\n // }\r\n // throw e;\r\n // }\r\n // }\r\n\r\n // if (typeof output.address === 'string' && isValidAddress(output.address, coinInfo)) {\r\n // // validate address with coin info\r\n // let e: GeneralResponse = {\r\n // success: false,\r\n // errorCode: GeneralErrors.INVALID_PARAM,\r\n // errorMessage: `Invalid output address ${ output.address }`,\r\n // }\r\n // throw e;\r\n // }\r\n }\r\n\r\n \r\n // Total output amount should be more than coin dust limit\r\n if( totalOutputAmount.lte(this._coinInfo.dust_limit)){\r\n let e : GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: `The total output is less than coin dust ${this._coinInfo.dust_limit}`,\r\n }\r\n\r\n throw e;\r\n }\r\n\r\n }\r\n catch (ex) {\r\n MyConsole.Info(ex);\r\n this._isSigning = false;\r\n return reject(ex);\r\n }\r\n\r\n // keep transaction\r\n this._bitcoinTx = bitcoinTransaction;\r\n\r\n // CPC, PPC and tPPC need timestamp\r\n let shortcut = this._coinInfo.shortcut;\r\n if ((shortcut === 'CPC' || shortcut === 'PPC' || shortcut === 'tPPC') && !Object.prototype.hasOwnProperty.call(bitcoinTransaction, 'timestamp')) {\r\n const d = new Date();\r\n\r\n bitcoinTransaction.options.timestamp = Math.round(d.getTime() / 1000);\r\n }\r\n\r\n // build a dictionary of RefTx\r\n const dicRefTx: { [key: string]: ProkeyResponses.RefTransaction } = {};\r\n if (bitcoinTransaction.refTxs != null) {\r\n bitcoinTransaction.refTxs.forEach((tx: ProkeyResponses.RefTransaction) => {\r\n dicRefTx[tx.hash.toLowerCase()] = tx;\r\n });\r\n }\r\n\r\n let param : BitcoinSignTxParams = {\r\n outputs_count: bitcoinTransaction.outputs.length,\r\n inputs_count: bitcoinTransaction.inputs.length,\r\n coin_name: bitcoinTransaction.coinName,\r\n ...bitcoinTransaction.options,\r\n }\r\n\r\n MyConsole.Info(param);\r\n \r\n try{\r\n device.AddOnFailureCallBack(this._failedSignHandler);\r\n let txReq = await device.SendMessage('SignTx', param, 'TxRequest');\r\n await this.TxReqHandler(device, dicRefTx, txReq, resolve, reject);\r\n }catch(e){\r\n this._isSigning = false;\r\n reject(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sign Message\r\n * @param device Prokey device instance\r\n * @param address_n array of BIP32/44 Path\r\n * @param message message to be signed\r\n * @param coin coin name\r\n */\r\n public async SignMessage(\r\n device: Device, \r\n address_n: Array, \r\n message: Uint8Array, \r\n coin?: string): Promise {\r\n\r\n let scriptType = PathUtil.GetScriptType(address_n);\r\n\r\n let res = await device.SendMessage('SignMessage', {\r\n address_n: address_n,\r\n message: message,\r\n coin_name: coin || 'Bitcoin',\r\n script_type: scriptType,\r\n },'MessageSignature');\r\n\r\n if(res.signature){\r\n res.signature = Utility.ByteArrayToHexString(res.signature);\r\n }\r\n\r\n return res;\r\n }\r\n \r\n /**\r\n * Verify Message\r\n * @param device Prokey device instance\r\n * @param address address\r\n * @param message message\r\n * @param signature signature data\r\n * @param coinName coin name\r\n */\r\n public async VerifyMessage(\r\n device: Device,\r\n address: string,\r\n message: Uint8Array,\r\n signature: Uint8Array,\r\n coinName: string): Promise {\r\n\r\n return await device.SendMessage('VerifyMessage', {\r\n address: address,\r\n signature: signature,\r\n message: message,\r\n coin_name: coinName || 'Bitcoin',\r\n } ,'Success');\r\n }\r\n\r\n // **********************************\r\n // PRIVATE FUNCTIONS\r\n // Signing transaction helpers\r\n // **********************************\r\n private RequesCurrentTxInfo(\r\n reqType: ProkeyResponses.eRequestType,\r\n reqIndex: number | string): any {\r\n //! request_index is used for input/output requested index\r\n const i = +reqIndex;\r\n\r\n //! the request should not be TXMETA or TXEXTRADATA\r\n if (reqType == ProkeyResponses.eRequestType.TXMETA || reqType == ProkeyResponses.eRequestType.TXEXTRADATA) {\r\n throw new Error(`Cannot read ${reqType} from signed transaction`);\r\n }\r\n\r\n if (reqType == ProkeyResponses.eRequestType.TXINPUT) {\r\n\r\n //! The prev_hash needs some modifications\r\n let inp: any = this._bitcoinTx.inputs[i];\r\n\r\n if (typeof (inp.prev_hash) == 'string') {\r\n //! The device needs prev_hash as byteArray\r\n inp.prev_hash = Utility.HexStringToByteArray(inp.prev_hash);\r\n }\r\n\r\n //! The prev_hash to device should be reversed\r\n inp.prev_hash = Utility.ReverseByteArray(inp.prev_hash);\r\n\r\n return { inputs: [inp] };\r\n }\r\n else if (reqType == ProkeyResponses.eRequestType.TXOUTPUT) {\r\n return { outputs: [this._bitcoinTx.outputs[i]] };\r\n }\r\n\r\n throw new Error(`Unknown request type: ${reqType}`);\r\n }\r\n \r\n private RequestPrevTxInfo(\r\n reqTx: ProkeyResponses.RefTransaction,\r\n requestType: ProkeyResponses.eRequestType,\r\n requestIndex: string | number,\r\n dataLen?: (string | number),\r\n dataOffset?: (string | number)): any {\r\n\r\n const i = +requestIndex;\r\n if (requestType == ProkeyResponses.eRequestType.TXINPUT) {\r\n //! The hash needs some modifications\r\n let inp: any = reqTx.inputs[i];\r\n\r\n //! The device needs prev_hash as byteArray\r\n inp.prev_hash = Utility.HexStringToByteArray(inp.prev_hash);\r\n\r\n //! The prev_hash to device should be reversed\r\n inp.prev_hash = Utility.ReverseByteArray(inp.prev_hash);\r\n\r\n inp.script_sig = Utility.HexStringToByteArray(inp.script_sig);\r\n\r\n return { inputs: [inp] };\r\n }\r\n\r\n if (requestType == ProkeyResponses.eRequestType.TXOUTPUT) {\r\n let out: any = reqTx.bin_outputs[i];\r\n\r\n out.script_pubkey = Utility.HexStringToByteArray(out.script_pubkey);\r\n return { bin_outputs: [out] };\r\n }\r\n\r\n if (requestType == ProkeyResponses.eRequestType.TXEXTRADATA) {\r\n if (dataLen == null) {\r\n throw new Error('Missing extra_data_len');\r\n }\r\n const dataLenN: number = +dataLen;\r\n\r\n if (dataOffset == null) {\r\n throw new Error('Missing extra_data_offset');\r\n }\r\n const dataOffsetN: number = +dataOffset;\r\n\r\n if (reqTx.extra_data == null) {\r\n throw new Error('No extra data for transaction ' + reqTx.hash);\r\n }\r\n\r\n const data: string = reqTx.extra_data;\r\n const substring = data.substring(dataOffsetN * 2, (dataOffsetN + dataLenN) * 2);\r\n return { extra_data: substring };\r\n }\r\n\r\n if (requestType == ProkeyResponses.eRequestType.TXMETA) {\r\n const outputCount = reqTx.bin_outputs.length;\r\n const data: string | undefined = reqTx.extra_data;\r\n const meta = {\r\n version: reqTx.version,\r\n lock_time: reqTx.lock_time,\r\n inputs_cnt: reqTx.inputs.length,\r\n outputs_cnt: outputCount,\r\n timestamp: reqTx.timestamp,\r\n version_group_id: reqTx.version_group_id,\r\n };\r\n\r\n if (typeof data === 'string' && data.length !== 0) {\r\n return {\r\n ...meta,\r\n extra_data_len: data.length / 2,\r\n };\r\n }\r\n\r\n return meta;\r\n }\r\n throw new Error(`Unknown request type: ${requestType}`);\r\n }\r\n \r\n private RequestTxInfo(\r\n req: ProkeyResponses.TxRequest,\r\n dicRefTx: { [hash: string]: ProkeyResponses.RefTransaction },\r\n ): any {\r\n // Device needs previous transaction info\r\n if (req.details.tx_hash && req.details.tx_hash.length > 0) {\r\n let requestedHashInString: string = Utility.ByteArrayToHexString(req.details.tx_hash);\r\n const reqTx = dicRefTx[requestedHashInString];\r\n if (reqTx == null) {\r\n throw new Error(`Unknown tx: ${req.details.tx_hash} requested`);\r\n }\r\n\r\n return this.RequestPrevTxInfo(\r\n reqTx,\r\n req.request_type,\r\n req.details.request_index,\r\n req.details.extra_data_len,\r\n req.details.extra_data_offset\r\n )\r\n } else { // Device needs current transaction info\r\n return this.RequesCurrentTxInfo(\r\n req.request_type,\r\n req.details.request_index,\r\n )\r\n }\r\n\r\n }\r\n \r\n private SaveTxSignatures(txReq: ProkeyResponses.TxRequestSerialized): void {\r\n if (txReq.serialized_tx != null) {\r\n if (this._serializedTx.length != 0) {\r\n this._serializedTx += ',';\r\n }\r\n this._serializedTx += txReq.serialized_tx;\r\n }\r\n if (txReq.signature_index != null) {\r\n if (txReq.signature == null) {\r\n throw new Error('Unexpected null in signature.');\r\n }\r\n\r\n if (txReq.signature.length > 0)\r\n this._signatures[txReq.signature_index] = txReq.signature;\r\n }\r\n };\r\n \r\n private async TxReqHandler(\r\n device: Device,\r\n dicRefTx: { [key: string]: ProkeyResponses.RefTransaction },\r\n txReq: ProkeyResponses.TxRequest,\r\n resolve: any,\r\n reject: any, ): Promise {\r\n\r\n MyConsole.Info(\"BitcoinCommands::TxReqHandler->Request\", txReq);\r\n\r\n // Save signature and serialized transaction\r\n if (txReq.serialized != null) {\r\n this.SaveTxSignatures(txReq.serialized);\r\n }\r\n\r\n //! If siging finished, Callback function will be called\r\n // and the serialized data will be passed to it\r\n if (txReq.request_type == ProkeyResponses.eRequestType.TXFINISHED) {\r\n this._isSigning = false;\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n resolve({\r\n serialized_tx: Utility.DecimalStrigArrayToHexString(this._serializedTx, ','),\r\n signatures: this._signatures,\r\n });\r\n return { success: true };\r\n }\r\n\r\n //! Device needs more data about current/previous transaction(s)\r\n try {\r\n \r\n //! Prepare the answer\r\n const resTx = this.RequestTxInfo(txReq, dicRefTx);\r\n\r\n //! Log the response\r\n MyConsole.Info(\"BitcoinCommands::LogAck->Ack\", resTx);\r\n\r\n //! Send the answer to deivce\r\n const res = await device.SendMessage('TxAck', { tx: resTx }, 'TxRequest')\r\n //! Check device response\r\n return await this.TxReqHandler(device, dicRefTx, res, resolve, reject);\r\n }\r\n catch (ex) {\r\n if (ex instanceof Error) {\r\n this._isSigning = false;\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n return reject({\r\n success: false,\r\n errorCode: GeneralErrors.UNKNOWN,\r\n errorMessage: ex.message,\r\n })\r\n }\r\n return {\r\n success: false,\r\n errorCode: GeneralErrors.UNKNOWN,\r\n };\r\n }\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { MyConsole } from '../utils/console';\r\nimport { Protobuf } from '../protobuf/Protobuf';\r\nimport * as ProkeyResponses from '../models/Prokey';\r\nimport { ITransport, TransportType } from '../transport/ITransport';\r\nimport { WebUsb } from '../transport/WebUsb';\r\nimport { IMessagePayload } from '../transport/ITransport';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport * as Util from '../utils/utils';\r\nimport { GeneralResponse, GeneralErrors } from '../models/GeneralResponse';\r\nimport { EventEmitter } from 'events' \r\nimport { WebSocketTransport } from '../transport/WebSocketTransport';\r\n\r\n\r\nexport class Device {\r\n private pb: Protobuf;\r\n private _passphraseTemporaryState?: string;\r\n private _transport!: ITransport;\r\n private _sendMessageResolve: any;\r\n private _sendMessageReject: any;\r\n private _sendMessageExpectedResponseType: string = \"\";\r\n\r\n _eventEmitters = new EventEmitter();\r\n\r\n /**\r\n * \r\n * @param callback this is an optional call back showing if protobuf successfully initialized\r\n */\r\n constructor(callback?: (success: boolean) => void, pathToProtoFile?: string) {\r\n this.pb = Protobuf.Instance;\r\n if (!this.pb.IsInited) {\r\n this.pb.Init((isSuccess: boolean) => {\r\n if(callback) {\r\n callback(isSuccess);\r\n }\r\n }, pathToProtoFile);\r\n } else if(callback) {\r\n callback(true);\r\n }\r\n }\r\n\r\n // ********************************************************\r\n // Registering Events\r\n // ********************************************************\r\n /**\r\n * Register a callback function to handle Device Button Request \r\n * @param fn Call back function to serve Device Button Request\r\n */\r\n public AddOnButtonRequestCallBack( fn: (buttonRequestType: string) => void ) {\r\n this._eventEmitters.addListener('OnButtonRequest', fn);\r\n }\r\n\r\n /**\r\n * Remove Device Button Request handler\r\n * @param fn Call back function to serve Device Button Request\r\n */\r\n public RemoveOnButtonRequestCallBack( fn: (buttonRequestType: string) => void ) {\r\n this._eventEmitters.removeListener('OnButtonRequest', fn)\r\n }\r\n\r\n /**\r\n * Register a callback function to handle Failure situations\r\n * @param fn Call back function to handle Failure situations\r\n */\r\n public AddOnFailureCallBack( fn: (reason: any) => void ) {\r\n this._eventEmitters.addListener('OnFailure', fn);\r\n }\r\n\r\n /**\r\n * Remove On Failure handler\r\n * @param fn Call back function\r\n */\r\n public RemoveOnFailureCallBack( fn: (reason: any) => void ) {\r\n this._eventEmitters.removeListener('OnFailure', fn)\r\n }\r\n\r\n /**\r\n * Register a callback function to handle Pin Matrix Request\r\n * @param fn Call back function to handle Pin Matrix Request\r\n */\r\n public AddOnPinMatrixRequestCallBack( fn: (pinMatrixRequestType: string) => void ) {\r\n this._eventEmitters.addListener('OnPinMatrixRequest', fn);\r\n }\r\n\r\n /**\r\n * Remove Pin Matrix Request handler\r\n * @param fn Call back function\r\n */\r\n public RemoveOnPinMatrixRequestCallBack( fn: (pinMatrixRequestType: string) => void ) {\r\n this._eventEmitters.removeListener('OnPinMatrixRequest', fn)\r\n }\r\n\r\n /**\r\n * Register a callback function to handle Passpharase Request\r\n * @param fn Call back function to handle Passpharase Request\r\n */\r\n public AddOnPasspharaseRequestCallBack( fn: () => void ) {\r\n this._eventEmitters.addListener('OnPasspharaseRequest', fn);\r\n }\r\n\r\n /**\r\n * Remove Passpharase Request handler\r\n * @param fn Call back function\r\n */\r\n public RemoveOnPasspharaseRequestCallBack( fn: () => void ) {\r\n this._eventEmitters.removeListener('OnPasspharaseRequest', fn)\r\n }\r\n\r\n /**\r\n * Register a callback function to handle Word Request\r\n * @param fn Call back function to handle Word Request\r\n */\r\n public AddOnWordRequestCallBack( fn: () => void ) {\r\n this._eventEmitters.addListener('OnWordRequest', fn);\r\n }\r\n\r\n /**\r\n * Remove Word Request handler\r\n * @param fn Call back function\r\n */\r\n public RemoveOnWordRequestCallBack( fn: () => void ) {\r\n this._eventEmitters.removeListener('OnWordRequest', fn)\r\n }\r\n\r\n /**\r\n * Register a callback function to handle Device Disconnect\r\n * @param fn Call back function to handle Device Disconnect\r\n */\r\n public AddOnDeviceDisconnectCallBack( fn: () => void ) {\r\n this._eventEmitters.addListener('OnDeviceDisconnect', fn);\r\n }\r\n\r\n /**\r\n * Remove Device Disconnect handler\r\n * @param fn Call back function\r\n */\r\n public RemoveOnDeviceDisconnectCallBack( fn: () => void ) {\r\n this._eventEmitters.removeListener('OnDeviceDisconnect', fn)\r\n }\r\n\r\n /**\r\n * Initializing the Trabsport layer and up and running the webusb\r\n * This function MUST be called first before executing any function \r\n */\r\n public async TransportConnect(transportType: TransportType = TransportType.WebUsb): Promise {\r\n switch (transportType) {\r\n case TransportType.WebUsb:\r\n this._transport = new WebUsb(); \r\n break;\r\n\r\n case TransportType.WebSocket:\r\n this._transport = new WebSocketTransport();\r\n \r\n default:\r\n break;\r\n }\r\n\r\n let res = await this._transport.Init(true,\r\n // OnReceice call back\r\n (msgPayload: IMessagePayload) => {\r\n this.OnReceiveDataFromBridge(msgPayload);\r\n });\r\n\r\n this._transport.onDeviceDisconnect = () => {\r\n this._eventEmitters.emit('OnDeviceDisconnect');\r\n }\r\n\r\n if (res.success == false)\r\n return res;\r\n\r\n return await this._transport.Open();\r\n }\r\n\r\n /**\r\n * Reset device to default state and ask for device details\r\n */\r\n public async Initialize(){\r\n return await this.SendMessage('Initialize', {}, 'Features');\r\n }\r\n\r\n public async RebootDevice(){\r\n await this.SendMessage('RebootDevice', {}, 'Success');\r\n }\r\n \r\n /**\r\n * Ping command\r\n * @param message Message to show on device or return on response\r\n * @param buttonReq Rise button request\r\n */\r\n public async Ping(message?: string, buttonReq?: boolean): Promise {\r\n return await this.SendMessage('Ping', {message: message, buttonProtection: buttonReq} , 'Success');\r\n }\r\n \r\n /**\r\n * Get device feature\r\n */\r\n public async GetFeatures(): Promise {\r\n return await this.SendMessage('GetFeatures', {}, 'Features');\r\n }\r\n \r\n /**\r\n * Request to change device pin\r\n * @param isRemove true: remove, false: change \r\n */\r\n public async ChangePin(isRemove: boolean): Promise {\r\n return await this.SendMessage('ChangePin', {remove: isRemove}, 'Success');\r\n }\r\n \r\n /**\r\n * Change pin\r\n * @param label New label\r\n */\r\n public async ChangeLabel(label: string): Promise {\r\n return await this.SendMessage('ApplySettings', {label: label} , 'Success');\r\n }\r\n \r\n /**\r\n * Request to wipe device\r\n */\r\n public async WipeDevice(): Promise {\r\n return await this.SendMessage('WipeDevice', {}, 'Success');\r\n }\r\n \r\n /**\r\n * Request to create a wallet\r\n * @param skipBackUp Skip doing backup \r\n * @param wordCount number of backup words\r\n */\r\n public async Reset(skipBackUp: Boolean, label?: string, wordCount?: number): Promise {\r\n let wc = 0;\r\n if(wordCount == null || wordCount == 24) {\r\n wc = 256;\r\n }\r\n else if (wordCount == 12) {\r\n wc = 128;\r\n } \r\n else if (wordCount == 18) {\r\n wc = 192;\r\n }\r\n else {\r\n wc = 256;\r\n }\r\n\r\n return this.SendMessage('ResetDevice', { strength: wc, skip_backup: skipBackUp, label: label}, 'Success');\r\n }\r\n \r\n /**\r\n * Start backup device after creating backup\r\n */\r\n public async Backup(): Promise {\r\n return this.SendMessage('BackupDevice', {}, 'Success');\r\n }\r\n \r\n /**\r\n * Enable passphrase\r\n */\r\n public async EnablePassphrase(): Promise {\r\n return await this.SendMessage('ApplySettings', {use_passphrase: true} , 'Success');\r\n }\r\n \r\n /**\r\n * Disable passphrase\r\n */\r\n public async DisablePassphrase(): Promise {\r\n return await this.SendMessage('ApplySettings', {use_passphrase: false} , 'Success');\r\n }\r\n \r\n\r\n /**\r\n * Cancel the last command\r\n */\r\n public async Cancel(): Promise {\r\n return await this.SendMessageByType('Cancel', {});\r\n }\r\n\r\n /**\r\n * To response to OnPinMatrixRequest, this function needs to be called\r\n * @param pin PinMatrix\r\n */\r\n public async PinMatrixAck(pin: string): Promise {\r\n return await this.SendMessageByType('PinMatrixAck', { pin: pin });\r\n }\r\n\r\n /**\r\n * To response to OnPasspharaseRequest, this function needs to be called\r\n * @param phassphrase Phassphrase\r\n */\r\n public async PassphraseAck(phassphrase: string): Promise {\r\n return await this.SendMessageByType('PassphraseAck', { passphrase: phassphrase, state: null });\r\n }\r\n\r\n /**\r\n * To response to OnWordRequest, this function needs to be called\r\n * @param word \r\n */\r\n public async WorkAck(word: string) {\r\n return await this.SendMessageByType('WordAck', { word: word });\r\n }\r\n\r\n /**\r\n * Send message to the device\r\n * @param messageTypeName MessageType\r\n * @param param Message\r\n * @param expectedResType Expected response type\r\n */\r\n public async SendMessage(messageTypeName: string, param: any, expectedResType: string): Promise {\r\n return new Promise(async (resolve, reject) => {\r\n if (this._transport == null)\r\n {\r\n reject({ success: false, errorCode: GeneralErrors.NO_TRANSPORT });\r\n return;\r\n }\r\n\r\n if (this._transport.IsOpen() == false)\r\n {\r\n reject({ success: false, errorCode: GeneralErrors.USER_DID_NOT_SELECT_A_DEVICE });\r\n return;\r\n }\r\n\r\n // resolve will be called when device sends the corresponding response to the message\r\n this._sendMessageResolve = resolve;\r\n\r\n // reject will be called when device sends failure or unexpected response\r\n this._sendMessageReject = reject;\r\n\r\n // \r\n this._sendMessageExpectedResponseType = expectedResType;\r\n\r\n const res = await this.SendMessageByType(messageTypeName, param);\r\n if(res.success == false) {\r\n // On reboot command, device does not return any response\r\n if(messageTypeName == \"RebootDevice\") {\r\n return this._sendMessageResolve({});\r\n }\r\n return this._sendMessageReject(res);\r\n }\r\n });\r\n }\r\n\r\n // ***************************************\r\n // Private Functions\r\n // ***************************************\r\n private assertType(res: GeneralResponse, expectedResType: string) {\r\n if (res.type !== expectedResType) {\r\n throw new TypeError(`DeviceCommands::assertType->Response of unexpected type: ${res.type}. Should be ${expectedResType}`);\r\n }\r\n }\r\n\r\n private async SendMessageByType(typeName: string, message: any): Promise {\r\n try {\r\n const type = this.pb.GetMessageByName(typeName);\r\n const msgId = this.pb.GetMessageTypeIdByName(typeName);\r\n \r\n if(msgId == null) {\r\n throw new Error(\"Cannot find Message Id by name\");\r\n }\r\n\r\n if(type == null) {\r\n throw new Error(\"Cannot find Message type by name\");\r\n }\r\n\r\n const msg = type.create(message);\r\n if(!msg) {\r\n throw new Error(\"Cannot create message\");\r\n }\r\n\r\n const buffer = type.encode(msg).finish();\r\n\r\n return await this._transport.SendProtoMsg(msgId, buffer);\r\n\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n MyConsole.Exception('DeviceCommands::SendMessageByType->' + e);\r\n return {\r\n success: false,\r\n errorCode: GeneralErrors.PROTO_ERR,\r\n errorMessage: e.message\r\n };\r\n }\r\n return {\r\n success: false,\r\n errorCode: GeneralErrors.UNKNOWN,\r\n };\r\n }\r\n }\r\n\r\n private OnReceiveDataFromBridge(msgPayload: IMessagePayload): void {\r\n const res = this.ParsMessage(msgPayload);\r\n if (res.success == false) {\r\n // Reject the current command because message parsing failed\r\n if(this._sendMessageReject) {\r\n this._sendMessageReject(res.errorMessage);\r\n }\r\n return;\r\n }\r\n\r\n if (res.type === 'Failure') \r\n {\r\n console.log(\"Failure\", res);\r\n if(this._eventEmitters.emit('OnFailure', res.payload) == false){\r\n MyConsole.Warning('DeviceCommands::OnReceiveDataFromBridge->OnFailure has no listener');\r\n }\r\n // Reject the current command because of failure\r\n if(this._sendMessageReject) {\r\n this._sendMessageReject(res.payload);\r\n }\r\n } \r\n else if (res.type === 'ButtonRequest') \r\n {\r\n if( this._eventEmitters.emit('OnButtonRequest', this.pb.GetEnumNameByValue('ButtonRequestType', res.payload.code)) == false)\r\n {\r\n MyConsole.Warning('DeviceCommands::OnReceiveDataFromBridge->OnButtonRequest has no listener');\r\n }\r\n\r\n // Sending 'ButtonAck' to ProKey to continue its job\r\n this.SendMessageByType('ButtonAck', {});\r\n\r\n } \r\n else if (res.type === 'EntropyRequest') \r\n {\r\n // No need to reply by upper layer\r\n let rand: Array = Util.generateEntropy(32);\r\n this.SendMessageByType('EntropyAck', {\r\n entropy: rand,\r\n });\r\n\r\n } \r\n else if (res.type === 'PinMatrixRequest') \r\n { \r\n // Next Step: To reply, PinMatrixAck function should be called\r\n if(this._eventEmitters.emit('OnPinMatrixRequest', this.pb.GetEnumNameByValue('PinMatrixRequestType', res.payload.type)) == false)\r\n {\r\n MyConsole.Warning('DeviceCommands::OnReceiveDataFromBridge->OnPinMatrixRequest has no listener');\r\n }\r\n } \r\n else if (res.type === 'PassphraseRequest') \r\n { \r\n // Next Step: To reply, PassphraseAck function should be called\r\n if(this._eventEmitters.emit('OnPasspharaseRequest') == false)\r\n {\r\n MyConsole.Warning('DeviceCommands::OnReceiveDataFromBridge->OnPasspharaseRequest has no listener');\r\n }\r\n } \r\n else if (res.type === 'PassphraseStateRequest') \r\n { \r\n // No need to reply by upper layer\r\n const state: string = res.payload.state;\r\n this._passphraseTemporaryState = state;\r\n this.SendMessageByType('PassphraseStateAck', {});\r\n } \r\n else if (res.type === 'WordRequest') \r\n { \r\n // Next Step: To reply, WordAck function should be called\r\n if(this._eventEmitters.emit('OnWordRequest') == false) \r\n {\r\n MyConsole.Warning('DeviceCommands::OnReceiveDataFromBridge->OnWordRequest has no listener');\r\n }\r\n } \r\n else \r\n {\r\n try {\r\n this.assertType(res, this._sendMessageExpectedResponseType);\r\n } catch(e) {\r\n if(this._sendMessageReject) {\r\n this._sendMessageReject(e);\r\n }\r\n }\r\n\r\n if(this._sendMessageResolve) {\r\n this._sendMessageResolve(res.payload);\r\n }\r\n }\r\n }\r\n\r\n private ParsMessage(msgPayload: IMessagePayload): GeneralResponse {\r\n try {\r\n const msg = this.pb.GetMessageById(msgPayload.MsgId);\r\n if(!msg) {\r\n throw new Error(\"Cannot get message by id\");\r\n }\r\n\r\n const type = this.pb.GetMessageTypeById(msgPayload.MsgId);\r\n if(!type) {\r\n throw new Error(\"Cannot get message type by id\");\r\n }\r\n\r\n return {\r\n success: true,\r\n type: type,\r\n payload: msg.decode(msgPayload.ProtoPayload),\r\n };\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n MyConsole.Exception('DeviceCommands::GetMessage->' + e);\r\n return {\r\n success: false,\r\n errorMessage: e.message,\r\n };\r\n }\r\n return {\r\n success: false,\r\n errorCode: GeneralErrors.UNKNOWN,\r\n };\r\n }\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport * as ProkeyResponses from '../models/Prokey';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport * as Util from '../utils/utils'\r\nimport { getHDPath } from '../utils/pathUtils';\r\nimport { Device } from './Device';\r\nimport { GeneralResponse, GeneralErrors } from '../models/GeneralResponse';\r\nimport { ICoinCommands } from './ICoinCommand';\r\nimport { EthereumTx, EthTxToProkey } from '../models/EthereumTx';\r\nimport { validateParams } from '../utils/paramsValidator';\r\nimport { Erc20BaseCoinInfoModel, EthereumBaseCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { CoinInfo, CoinBaseType } from '../coins/CoinInfo';\r\nimport { TypedMessage, MessageTypes, HashTypedDataModel } from '../models/EthereumTypedDataModel';\r\nimport { HashTypedData } from '../utils/ethereum-hashTypedData';\r\n\r\nexport class EthereumCommands implements ICoinCommands {\r\n\r\n _isSigning = false;\r\n _failedSignHandler: any;\r\n\r\n constructor() {\r\n }\r\n \r\n /**\r\n * Get Bitcoin/Litecoin and etc address\r\n * @param device Prokey device instance\r\n * @param path BIP path \r\n * @param showOnProkey true means show the address on device display\r\n */\r\n public async GetAddress(device: Device, path: Array, showOnProkey?: boolean): Promise {\r\n\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n let showDisplay = (showOnProkey == null) ? true : showOnProkey;\r\n\r\n // convert path to array of num\r\n let address_n: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n address_n = getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n\r\n } else {\r\n address_n = path;\r\n }\r\n\r\n let param = {\r\n address_n: address_n,\r\n show_display: showDisplay,\r\n }\r\n\r\n let address = await device.SendMessage('EthereumGetAddress', param, 'EthereumAddress');\r\n //! Add 0x prefix to be backward compatible\r\n if(address.address.startsWith(\"0x\") == false) {\r\n address.address = \"0x\" + address.address;\r\n }\r\n\r\n return address;\r\n }\r\n \r\n /**\r\n * Get List of addresses, This function is useful in account discovery\r\n * @param device the prokey device instance\r\n * @param paths list of paths to retrive the addresses\r\n */\r\n public async GetAddresses(device: Device, paths: Array>): Promise> {\r\n if (device == null || paths == null) {\r\n return Promise.reject({ \r\n success: false, \r\n errorCode: GeneralErrors.INVALID_PARAM \r\n });\r\n }\r\n\r\n let lstAddress: Array = new Array();\r\n\r\n paths.forEach(async (path) => \r\n {\r\n let pn: Array;\r\n if(typeof path == \"string\") {\r\n try {\r\n pn = PathUtil.getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n } \r\n else {\r\n pn = path;\r\n }\r\n\r\n let param = {\r\n address_n: pn,\r\n show_display: false,\r\n }\r\n\r\n try{\r\n let address = await device.SendMessage('EthereumGetAddress', param, 'EthereumAddress');\r\n lstAddress.push(address);\r\n } catch(e) {\r\n Promise.reject(e);\r\n }\r\n });\r\n\r\n return lstAddress;\r\n }\r\n\r\n /**\r\n * Get Public key\r\n * @param device The prokey device\r\n * @param path BIP path\r\n * @param showOnProkey true means show the public key on prokey display\r\n */\r\n public async GetPublicKey(device: Device,\r\n path: string | Array,\r\n showOnProkey?: boolean): Promise {\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n let showDisplay = (showOnProkey == null) ? true : showOnProkey;\r\n\r\n // convert path to array of num\r\n let address_n: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n address_n = getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n\r\n } else {\r\n address_n = path;\r\n }\r\n\r\n let param = {\r\n address_n: address_n,\r\n show_display: showDisplay,\r\n }\r\n\r\n return await device.SendMessage('EthereumGetPublicKey', param, 'EthereumPublicKey');\r\n }\r\n\r\n /**\r\n * Sign an ethereum transaction\r\n * @param device Prokey device instance\r\n * @param ethTx ETH transaction\r\n */\r\n public async SignTransaction(device: Device, ethTx: EthereumTx): Promise {\r\n\r\n if(!device)\r\n throw new Error(\"Ethereum::SignTransaction->parameter Device cannot be null\");\r\n\r\n if(!ethTx)\r\n throw new Error(\"Ethereum::SignTransaction->parameter ethTx cannot be null\");\r\n\r\n if(ethTx.gasPrice == undefined && (ethTx.maxFeePerGas == undefined || ethTx.maxPriorityFeePerGas == undefined)) {\r\n throw new Error(\"Neither gasPrice, maxFeePerGas or maxPriorityFeePerGas provided\");\r\n }\r\n\r\n if(ethTx.gasPrice != undefined && (ethTx.maxFeePerGas != undefined || ethTx.maxPriorityFeePerGas != undefined)) {\r\n throw new Error(\"Cannot mix Legacy and EIP1559 transaction parameters\");\r\n }\r\n\r\n // reject if already in signing\r\n if(this._isSigning)\r\n return Promise.reject(\"Ethereum::SignTransaction->Already in signig\");\r\n\r\n return new Promise(async (resolve,reject) => {\r\n // This var is using to reject new request until this one is begin resolved or rejected\r\n this._isSigning = true;\r\n\r\n const isEIP1559 = ethTx.maxFeePerGas && ethTx.maxPriorityFeePerGas;\r\n\r\n this._failedSignHandler = (reason: any) => {\r\n // \"this\" can be null if the user after signing a transaction, change the coin \r\n if(this != undefined)\r\n this._isSigning = false;\r\n\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n\r\n reject(`Signing transaction failed: ${reason.message}`);\r\n };\r\n\r\n // Validate the parameters\r\n try {\r\n\r\n //! Validate common parameters\r\n validateParams(ethTx, [\r\n { name: 'address_n', type: 'array', obligatory: true },\r\n { name: 'to', type: 'string', obligatory: true },\r\n { name: 'value', type: 'string', obligatory: true },\r\n { name: 'gasLimit', type: 'string', obligatory: true },\r\n { name: 'nonce', type: 'string', obligatory: true },\r\n { name: 'chainId', type: 'number', obligatory: true },\r\n { name: 'data', type: 'string' },\r\n { name: 'txType', type: 'number' },\r\n ]);\r\n\r\n // Validate EIP1559 parameters\r\n if(isEIP1559){\r\n validateParams(ethTx, [\r\n { name: 'maxFeePerGas', type: 'string', obligatory: true},\r\n { name: 'maxPriorityFeePerGas', type: 'string', obligatory: true},\r\n ]);\r\n }\r\n // Validate legacy transaction parameters \r\n else {\r\n validateParams(ethTx, [\r\n { name: 'gasPrice', type: 'string', obligatory: true},\r\n ]);\r\n }\r\n\r\n // strip '0x' from values\r\n Object.keys(ethTx).map(key => {\r\n if (typeof ethTx[key] === 'string') {\r\n let value: string = Util.StripHexPrefix(ethTx[key]);\r\n // pad left even\r\n if (value.length % 2 !== 0) { value = '0' + value; }\r\n // $FlowIssue\r\n ethTx[key] = value;\r\n }\r\n });\r\n }\r\n catch (ex) {\r\n this._isSigning = false;\r\n return reject(ex);\r\n }\r\n\r\n device.AddOnFailureCallBack(this._failedSignHandler);\r\n\r\n await this.signTx(device, ethTx, resolve, reject);\r\n\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * @param device Prokey device instance\r\n * @param path BIP44 path\r\n * @param typedData Typed data to be signed(Hash of this data will be sent to device)\r\n * @param isMetamaskV4Compatible Only V4 is supported\r\n * @returns \r\n */\r\n public async SignTypedData(device: Device, path: string | Array, typedData: TypedMessage, isMetamaskV4Compatible: boolean ): Promise {\r\n if(isMetamaskV4Compatible == false) {\r\n throw new Error(\"Only version 4 of typed data signing is supported\");\r\n }\r\n\r\n if(!device)\r\n throw new Error(\"Ethereum::SignTransaction->parameter Device cannot be null\");\r\n\r\n const hashed: HashTypedDataModel = HashTypedData(typedData, true);\r\n\r\n // convert path to array of num\r\n let address_n: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n address_n = getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n\r\n } else {\r\n address_n = path;\r\n }\r\n\r\n let param = {\r\n address_n: address_n,\r\n domain_separator_hash: Util.HexStringToByteArray(hashed.domain_separator_hash),\r\n message_hash: hashed.message_hash ? Util.HexStringToByteArray(hashed.message_hash) : null,\r\n }\r\n\r\n const { address, signature } = await device.SendMessage('EthereumSignTypedHash', param, 'EthereumTypedDataSignature');\r\n return {\r\n address: address,\r\n signature: \"0x\" + Util.ByteArrayToHexString(signature),\r\n }\r\n }\r\n\r\n /**\r\n * Sign Message\r\n * @param device Prokey device instance\r\n * @param address_n array of BIP32/44 Path\r\n * @param message message to be signed\r\n */\r\n public async SignMessage(device: Device, path: Array, message: Uint8Array, coinName?: string): Promise {\r\n let res = await device.SendMessage('EthereumSignMessage', {\r\n address_n: path,\r\n message: message,\r\n }, 'EthereumMessageSignature');\r\n\r\n if(res.signature){\r\n res.signature = Util.ByteArrayToHexString(res.signature);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Verify Message\r\n * @param device Prokey device instance\r\n * @param address address\r\n * @param signature signature data\r\n * @param message message\r\n * @param coinName\r\n */\r\n public async VerifyMessage(\r\n device: Device,\r\n address: string,\r\n message: Uint8Array,\r\n signature: Uint8Array): Promise {\r\n\r\n return await device.SendMessage('EthereumVerifyMessage', {\r\n address: address,\r\n signature: signature,\r\n message: message,\r\n },'Success');\r\n }\r\n\r\n // **********************************\r\n // PRIVATE FUNCTIONS\r\n // **********************************\r\n private async signTx (device: Device,\r\n ethTx: EthereumTx,\r\n resolve: any,\r\n reject: any): Promise {\r\n\r\n const length = ethTx.data == null ? 0 : ethTx.data.length / 2;\r\n\r\n const [first, rest] = Util.SplitString(1024*2, ethTx.data);\r\n\r\n let message: EthTxToProkey = {\r\n address_n: ethTx.address_n,\r\n nonce: Util.HexStringToByteArray(Util.StripLeadingZeroes(ethTx.nonce)),\r\n gas_limit: Util.HexStringToByteArray(Util.StripLeadingZeroes(ethTx.gasLimit)),\r\n to: ethTx.to,\r\n value: Util.HexStringToByteArray(Util.StripLeadingZeroes(ethTx.value)),\r\n }\r\n\r\n if(ethTx.gasPrice != undefined) {\r\n message = {\r\n ...message,\r\n gas_price: Util.HexStringToByteArray(Util.StripLeadingZeroes(ethTx.gasPrice)),\r\n };\r\n } else {\r\n message = {\r\n ...message,\r\n max_gas_fee: Util.HexStringToByteArray(Util.StripLeadingZeroes(ethTx.maxFeePerGas)),\r\n max_priority_fee: Util.HexStringToByteArray(Util.StripLeadingZeroes(ethTx.maxPriorityFeePerGas)),\r\n }\r\n }\r\n\r\n if (length !== 0) {\r\n message = {\r\n ...message,\r\n data_length: length,\r\n data_initial_chunk: Util.HexStringToByteArray(first),\r\n };\r\n }\r\n\r\n if (ethTx.chainId) {\r\n message = {\r\n ...message,\r\n chain_id: ethTx.chainId,\r\n };\r\n }\r\n\r\n if (ethTx.txType) {\r\n message = {\r\n ...message,\r\n tx_type: ethTx.txType,\r\n };\r\n }\r\n\r\n try\r\n {\r\n let msgType = (ethTx.gasPrice != undefined) ? 'EthereumSignTx' : 'EthereumSignTxEIP1559';\r\n let res = await device.SendMessage( msgType, message, 'EthereumTxRequest' );\r\n\r\n return await this.TxReqHandler(\r\n device,\r\n res,\r\n resolve,\r\n reject,\r\n rest,\r\n ethTx.chainId,\r\n );\r\n } catch(e) {\r\n this._isSigning = false;\r\n return reject(e);\r\n }\r\n }\r\n\r\n \r\n private async TxReqHandler( device: Device,\r\n request: ProkeyResponses.EthereumTxRequest,\r\n resolve: any,\r\n reject: any,\r\n data?: string,\r\n chain_id?: number): Promise {\r\n\r\n if (!request.data_length) {\r\n let v = request.signature_v;\r\n const r = request.signature_r;\r\n const s = request.signature_s;\r\n if (v == null || r == null || s == null) {\r\n var e: GeneralResponse = {\r\n success: false,\r\n errorMessage: 'Unexpected request.',\r\n }\r\n this._isSigning = false;\r\n return reject(e);\r\n }\r\n\r\n //! Remove Failure callback\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n\r\n resolve(\r\n {\r\n v: '0x' + v.toString(16),\r\n r: '0x' + Util.ByteArrayToHexString(r),\r\n s: '0x' + Util.ByteArrayToHexString(s),\r\n })\r\n\r\n // can accept new siging command\r\n this._isSigning = false;\r\n\r\n return {\r\n success: true,\r\n };\r\n }\r\n\r\n const [first, rest] = Util.SplitString(request.data_length * 2, data);\r\n\r\n const dataChunkInHexBytes = Util.HexStringToByteArray(first);\r\n\r\n try{\r\n let res = await device.SendMessage( 'EthereumTxAck', { data_chunk: dataChunkInHexBytes }, 'EthereumTxRequest' );\r\n return await this.TxReqHandler(\r\n device,\r\n res,\r\n resolve,\r\n reject,\r\n rest,\r\n chain_id);\r\n } catch(e) {\r\n this._isSigning = false;\r\n return reject(e);\r\n }\r\n }\r\n}","import {ICoinCommands} from \"./ICoinCommand\";\r\nimport {Device} from \"./Device\";\r\nimport {\r\n MessageSignature,\r\n NEMAddress,\r\n NEMGetAddress,\r\n NEMSignedTx,\r\n NEMSignTxMessage,\r\n PublicKey,\r\n Success\r\n} from \"../models/Prokey\";\r\nimport {NemCoinInfoModel} from \"../models/CoinInfoModel\";\r\nimport {CoinBaseType, CoinInfo} from \"../coins/CoinInfo\";\r\nimport {GeneralErrors, GeneralResponse} from \"../models/GeneralResponse\";\r\nimport * as PathUtil from \"../utils/pathUtils\";\r\nimport * as ProkeyResponses from \"../models/Prokey\";\r\nimport * as Utility from \"../utils/utils\";\r\nimport {MyConsole} from \"../utils/console\";\r\n\r\nexport class NemCommands implements ICoinCommands {\r\n private readonly _coinInfo: NemCoinInfoModel;\r\n\r\n constructor(coinName: string) {\r\n this._coinInfo = CoinInfo.Get(coinName, CoinBaseType.NEM);\r\n if (this._coinInfo == null) {\r\n throw new Error(`Cannot load CoinInfo for ${coinName}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get nem account address based on given path\r\n * @param device Prokey device instance\r\n * @param path BIP path\r\n * @param showOnProkey true means show the address on device display\r\n * @returns NEMAddress nem unique address\r\n */\r\n public async GetAddress(device: Device, path: Array | string, showOnProkey: boolean = true): Promise {\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n // convert path to array of num\r\n let address_n: Array = this.GetAddressArray(path);\r\n\r\n let param : NEMGetAddress = {\r\n address_n: address_n,\r\n network: this.getNemNetworkId(),\r\n show_display: showOnProkey\r\n }\r\n\r\n return await device.SendMessage('NEMGetAddress', param, 'NEMAddress');\r\n }\r\n\r\n /**\r\n * Get a list of account addresses based on given paths\r\n * @param device Prokey device instance\r\n * @param paths List of BIP paths\r\n * @returns Array\r\n */\r\n public async GetAddresses(device: Device, paths: Array | string>): Promise> {\r\n let nemAddresses: Array = new Array();\r\n for (const path of paths) {\r\n nemAddresses.push(await this.GetAddress(device, path, false));\r\n }\r\n return nemAddresses;\r\n }\r\n\r\n /**\r\n * Get Coin Info\r\n */\r\n public GetCoinInfo(): NemCoinInfoModel {\r\n return this._coinInfo;\r\n }\r\n\r\n /**\r\n * Get Public key\r\n * @param device The prokey device\r\n * @param path BIP path\r\n * @param showOnProkey true means show the public key on prokey display\r\n */\r\n public async GetPublicKey(device: Device, path: Array | string, showOnProkey?: boolean): Promise {\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n let address_n: Array;\r\n try {\r\n address_n = this.GetAddressArray(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n let param = {\r\n address_n: address_n,\r\n show_display: showOnProkey,\r\n }\r\n\r\n return await device.SendMessage('GetPublicKey', param, 'PublicKey');\r\n }\r\n\r\n /**\r\n * Sign Message\r\n * @param device Prokey device instance\r\n * @param path array of BIP32/44 Path\r\n * @param message message to be signed\r\n * @param coinName coin name\r\n */\r\n public async SignMessage(device: Device, path: Array, message: Uint8Array, coinName?: string): Promise {\r\n let scriptType = PathUtil.GetScriptType(path);\r\n\r\n let res = await device.SendMessage('SignMessage', {\r\n address_n: path,\r\n message: message,\r\n coin_name: coinName || 'Nem',\r\n script_type: scriptType,\r\n }, 'MessageSignature');\r\n\r\n if (res.signature) {\r\n res.signature = Utility.ByteArrayToHexString(res.signature);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Verify Message\r\n * @param device Prokey device instance\r\n * @param address address\r\n * @param message message\r\n * @param signature signature data\r\n * @param coinName coin name\r\n */\r\n public async VerifyMessage(device: Device, address: string, message: Uint8Array, signature: Uint8Array, coinName?: string): Promise {\r\n return await device.SendMessage('VerifyMessage', {\r\n address: address,\r\n signature: signature,\r\n message: message,\r\n coin_name: coinName || 'Nem',\r\n }, 'Success');\r\n }\r\n\r\n /**\r\n * sign transaction\r\n * @param device\r\n * @param transaction nem device transaction message request\r\n * @returns NEMSignedTx a model containing transaction data and signature\r\n */\r\n public async SignTransaction(device: Device, transaction: NEMSignTxMessage): Promise {\r\n var OnFailure = (reason: any) => {\r\n device.RemoveOnFailureCallBack(OnFailure);\r\n\r\n throw new Error(`Signing transaction failed: ${reason.message}`);\r\n };\r\n\r\n MyConsole.Info(\"NEMSignTxMessage\", transaction);\r\n\r\n if (!transaction) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: \"NemCommands::SignTransaction->parameter transaction cannot be null\",\r\n }\r\n\r\n throw e;\r\n }\r\n let transactionResponse = await device.SendMessage('NEMSignTx', transaction, 'NEMSignedTx');\r\n device.RemoveOnFailureCallBack(OnFailure);\r\n return transactionResponse;\r\n }\r\n\r\n private getNemNetworkId() {\r\n let networkId;\r\n if (this._coinInfo.test) {\r\n return 0x98;\r\n } else {\r\n return 0x68;\r\n }\r\n }\r\n\r\n /**\r\n * get byte array of path if its serialized\r\n * @param path\r\n * @returns Array account BIP path\r\n */\r\n public GetAddressArray(path: Array | string) : Array {\r\n if (typeof path == \"string\") {\r\n return PathUtil.getHDPath(path);\r\n } else {\r\n return path;\r\n }\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * Ali Akbar Mohammadi\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { ICoinCommands } from './ICoinCommand';\r\nimport * as ProkeyResponses from '../models/Prokey';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport * as Utility from '../utils/utils';\r\nimport { RippleCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { CoinInfo, CoinBaseType } from '../coins/CoinInfo';\r\nimport { Device } from './Device';\r\nimport { GeneralResponse, GeneralErrors } from '../models/GeneralResponse';\r\nimport { RippleTransaction } from '../models/Responses-V6';\r\nimport { RippleAddress } from '../models/Prokey';\r\nimport { MyConsole } from '../utils/console';\r\nimport { validateParams } from '../utils/paramsValidator';\r\n\r\nexport class RippleCommands implements ICoinCommands {\r\n\r\n private _coinInfo: RippleCoinInfoModel;\r\n _failedSignHandler: any;\r\n\r\n constructor(coinName: string) {\r\n this._coinInfo = CoinInfo.Get(coinName, CoinBaseType.Ripple);\r\n if (this._coinInfo == null) {\r\n throw new Error(`Cannot load CoinInfo for ${coinName}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get Bitcoin/Litecoin and etc address\r\n * @param device Prokey device instance\r\n * @param path BIP path \r\n * @param showOnProkey true means show the address on device display\r\n */\r\n public async GetAddress(device: Device, path: Array, showOnProkey?: boolean): Promise {\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n let showDisplay = (showOnProkey == null) ? true : showOnProkey;\r\n\r\n // convert path to array of num\r\n let address_n: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n address_n = PathUtil.getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n\r\n } else {\r\n address_n = path;\r\n }\r\n\r\n let param = {\r\n address_n: address_n,\r\n show_display: showDisplay,\r\n }\r\n\r\n return await device.SendMessage('RippleGetAddress', param, 'RippleAddress');\r\n }\r\n\r\n /**\r\n * Get List of addresses, This function is useful in account discovery\r\n * @param device the prokey device instance\r\n * @param paths list of paths to retrive the addresses\r\n */\r\n public async GetAddresses(device: Device, paths: Array>): Promise> {\r\n if (device == null || paths == null) {\r\n return Promise.reject({\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM\r\n });\r\n }\r\n\r\n let lstAddress = new Array();\r\n\r\n paths.forEach(async (path) => {\r\n let pn: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n pn = PathUtil.getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n }\r\n else {\r\n pn = path;\r\n }\r\n\r\n let param = {\r\n address_n: pn,\r\n show_display: false,\r\n }\r\n\r\n try {\r\n let address = await device.SendMessage('RippleGetAddress', param, 'RippleAddress');\r\n lstAddress.push(address);\r\n } catch (e) {\r\n Promise.reject(e);\r\n }\r\n });\r\n\r\n return lstAddress;\r\n }\r\n\r\n /**\r\n * Get Public key\r\n * @param device The prokey device\r\n * @param path BIP path\r\n * @param showOnProkey true means show the public key on prokey display\r\n */\r\n public async GetPublicKey(device: Device,\r\n path: Array | string,\r\n showOnProkey?: boolean): Promise {\r\n\r\n if (device == null || path == null) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.INVALID_PARAM });\r\n }\r\n\r\n let showDisplay = (showOnProkey == null) ? true : showOnProkey;\r\n\r\n // convert path to array of num\r\n let address_n: Array;\r\n if (typeof path == \"string\") {\r\n try {\r\n address_n = PathUtil.getHDPath(path);\r\n }\r\n catch (e) {\r\n return Promise.reject({ success: false, errorCode: GeneralErrors.PATH_NOT_VALID });\r\n }\r\n\r\n } else {\r\n address_n = path;\r\n }\r\n\r\n let param = {\r\n address_n: address_n,\r\n show_display: showDisplay,\r\n }\r\n\r\n return await device.SendMessage('GetPublicKey', param, 'PublicKey');\r\n }\r\n\r\n /**\r\n * sign a transaction\r\n * @param device Prokey device instance\r\n * @param transaction transaction to be signed \r\n */\r\n public async SignTransaction(device: Device, transaction: RippleTransaction): Promise {\r\n MyConsole.Info(\"RippleSignTx\", transaction);\r\n if (!device) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: \"RippleCommands::SignTransaction->parameter Device cannot be null\",\r\n }\r\n\r\n throw e;\r\n }\r\n\r\n if (!transaction) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: \"RippleCommands::SignTransaction->parameter transaction cannot be null\",\r\n }\r\n\r\n throw e;\r\n }\r\n\r\n if (!transaction.payment) {\r\n let e: GeneralResponse = {\r\n success: false,\r\n errorCode: GeneralErrors.INVALID_PARAM,\r\n errorMessage: \"RippleCommands::SignTransaction->parameter transaction.payment cannot be null\",\r\n }\r\n\r\n throw e;\r\n }\r\n\r\n return new Promise(async (resolve, reject) => {\r\n this._failedSignHandler = (reason: any) => {\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n\r\n reject(`Signing transaction failed: ${reason.message}`);\r\n };\r\n\r\n // Validate the parameters\r\n try {\r\n validateParams(transaction, [\r\n { name: \"address_n\", type: \"array\", obligatory: true },\r\n { name: \"fee\", type: \"number\", obligatory: true },\r\n { name: \"flags\", type: \"number\" },\r\n { name: \"sequence\", type: \"number\", obligatory: true },\r\n { name: \"last_ledger_sequence\", type: \"number\" },\r\n ]);\r\n\r\n validateParams(transaction.payment, [\r\n { name: \"amount\", type: \"number\", obligatory: true },\r\n { name: \"destination\", type: \"string\", obligatory: true },\r\n { name: \"destination_tag\", type: \"number\" }\r\n ]);\r\n }\r\n catch (ex) {\r\n MyConsole.Info(ex);\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n return reject(ex);\r\n }\r\n\r\n device.AddOnFailureCallBack(this._failedSignHandler);\r\n let res = await device.SendMessage('RippleSignTx', transaction, 'RippleSignedTx');\r\n device.RemoveOnFailureCallBack(this._failedSignHandler);\r\n resolve(res);\r\n });\r\n }\r\n\r\n /**\r\n * Sign Message\r\n * @param device Prokey device instance\r\n * @param address_n array of BIP32/44 Path\r\n * @param message message to be signed\r\n * @param coin coin name\r\n */\r\n public async SignMessage(\r\n device: Device,\r\n address_n: Array,\r\n message: Uint8Array,\r\n coin?: string): Promise {\r\n\r\n let scriptType = PathUtil.GetScriptType(address_n);\r\n\r\n let res = await device.SendMessage('SignMessage', {\r\n address_n: address_n,\r\n message: message,\r\n coin_name: coin || 'Ripple',\r\n script_type: scriptType,\r\n }, 'MessageSignature');\r\n\r\n if (res.signature) {\r\n res.signature = Utility.ByteArrayToHexString(res.signature);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Verify Message\r\n * @param device Prokey device instance\r\n * @param address address\r\n * @param message message\r\n * @param signature signature data\r\n * @param coinName coin name\r\n */\r\n public async VerifyMessage(\r\n device: Device,\r\n address: string,\r\n message: Uint8Array,\r\n signature: Uint8Array,\r\n coinName: string): Promise {\r\n\r\n return await device.SendMessage('VerifyMessage', {\r\n address: address,\r\n signature: signature,\r\n message: message,\r\n coin_name: coinName || 'Ripple',\r\n }, 'Success');\r\n }\r\n\r\n}","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nexport enum GeneralErrors {\r\n NO_ERR = 0,\r\n\r\n //! Client Side Errors\r\n NO_RESPONSE_FROM_BRIDGE,\r\n NO_DEVICE,\r\n CAN_NOT_ACQUIRE_DEVICE,\r\n NO_RESPONSE_FROM_DEVICE,\r\n NOT_IN_BOOTLOADER,\r\n PROTO_ERR,\r\n ERR_CHG1,\r\n ERR_CHG2,\r\n ERR_CHG3,\r\n ERR_CHG4,\r\n DEVICE_RETURN_FIRMWARE_ERROR,\r\n NO_WEB_USB,\r\n NO_TRANSPORT,\r\n USER_DID_NOT_SELECT_A_DEVICE,\r\n CAN_NOT_OPEN_USB,\r\n\r\n INVALID_PARAM = 0x80,\r\n MISSING_PARAM,\r\n PATH_NOT_VALID,\r\n BUSY,\r\n SIGNING_FAILED,\r\n UNKNOWN,\r\n}\r\n\r\nexport interface GeneralResponse {\r\n success: boolean;\r\n errorCode?: GeneralErrors;\r\n errorMessage?: string;\r\n payload?: any;\r\n type?: string;\r\n}","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n *\r\n * Hadi Robati, hadi@prokey.io\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nexport type CipheredKeyValue = {\r\n value: string,\r\n}\r\n\r\nexport type Success = {\r\n message?: string,\r\n};\r\n\r\nexport type Features = {\r\n vendor: string,\r\n major_version: number,\r\n minor_version: number,\r\n patch_version: number,\r\n bootloader_mode: boolean,\r\n device_id: string,\r\n pin_protection: boolean,\r\n passphrase_protection: boolean,\r\n language: string,\r\n label: string,\r\n initialized: boolean,\r\n revision: string,\r\n bootloader_hash: string,\r\n imported: boolean,\r\n pin_cached: boolean,\r\n passphrase_cached: boolean,\r\n firmware_present: boolean,\r\n needs_backup: boolean,\r\n flags: number,\r\n model: string,\r\n fw_major: number,\r\n fw_minor: number,\r\n fw_patch: number,\r\n fw_vendor: string,\r\n fw_vendor_keys: string,\r\n unfinished_backup: boolean,\r\n no_backup: boolean,\r\n};\r\n\r\nexport type ResetDeviceSettings = {\r\n display_random?: boolean,\r\n strength?: number,\r\n passphrase_protection?: boolean,\r\n pin_protection?: boolean,\r\n language?: string,\r\n label?: string,\r\n u2f_counter?: number,\r\n skip_backup?: boolean,\r\n};\r\n\r\nexport type HDPrivNode = {\r\n depth: number,\r\n fingerprint: number,\r\n child_num: number,\r\n chain_code: string,\r\n private_key: string,\r\n};\r\n\r\nexport type HDPubNode = {\r\n depth: number,\r\n fingerprint: number,\r\n child_num: number,\r\n chain_code: string,\r\n public_key: string,\r\n};\r\n\r\nexport type HDNode = HDPubNode | HDPrivNode;\r\n\r\nexport type LoadDeviceSettings = {\r\n pin?: string,\r\n passphrase_protection?: boolean,\r\n language?: string,\r\n label?: string,\r\n skip_checksum?: boolean,\r\n mnemonics?: Array,\r\n mnemonic?: string,\r\n node?: HDNode,\r\n payload?: string, // will be converted\r\n\r\n u2f_counter?: number,\r\n};\r\n\r\nexport type RecoverDeviceSettings = {\r\n word_count?: number,\r\n passphrase_protection?: boolean,\r\n pin_protection?: boolean,\r\n language?: string,\r\n label?: string,\r\n enforce_wordlist?: boolean,\r\n type?: number,\r\n u2f_counter?: number,\r\n};\r\n\r\nexport type ApplySettings = {\r\n language?: string,\r\n label?: string,\r\n use_passphrase?: boolean,\r\n homescreen?: string,\r\n};\r\n\r\nexport type MessageSignature = {\r\n address: string,\r\n signature: string,\r\n}\r\n\r\nexport type MultisigRedeemScriptType = {\r\n pubkeys: Array<{ node: string | HDPubNode, address_n: Array }>,\r\n signatures: Array,\r\n m?: number,\r\n}\r\n\r\n//export type InputScriptType = 'SPENDADDRESS' | 'SPENDMULTISIG' | 'SPENDWITNESS' | 'SPENDP2SHWITNESS';\r\nexport enum EnumInputScriptType {\r\n SPENDADDRESS = 0, // standard P2PKH address\r\n SPENDMULTISIG = 1, // P2SH multisig address\r\n EXTERNAL = 2, // reserved for external inputs (coinjoin)\r\n SPENDWITNESS = 3, // native SegWit\r\n SPENDP2SHWITNESS = 4, // SegWit over P2SH (backward compatible\r\n}\r\n// transaction input, parameter of SignTx message, declared by user\r\nexport type TransactionInput = {\r\n address_n: Array,\r\n prev_hash: string,\r\n prev_index: number,\r\n script_type?: EnumInputScriptType,\r\n sequence?: number,\r\n amount?: string, // (segwit, bip143: true, zcash overwinter)\r\n multisig?: MultisigRedeemScriptType,\r\n};\r\n\r\n// transaction input, parameter of TxAck message, declared by user or downloaded from backend\r\nexport type RefTransactionInput = {\r\n prev_hash: string,\r\n prev_index: number,\r\n script_sig?: string,\r\n sequence: number,\r\n};\r\n\r\nexport enum EnumOutputScriptType {\r\n PAYTOADDRESS = 0, // used for all addresses (bitcoin, p2sh, witness)\r\n PAYTOSCRIPTHASH = 1, // p2sh address (deprecated; use PAYTOADDRESS)\r\n PAYTOMULTISIG = 2, // only for change output\r\n PAYTOOPRETURN = 3, // op_return\r\n PAYTOWITNESS = 4, // only for change output\r\n PAYTOP2SHWITNESS = 5, // only for change output\r\n}\r\n// transaction output, parameter of SignTx message, declared by user\r\nexport type TransactionOutput = {\r\n address: string,\r\n script_type: EnumOutputScriptType.PAYTOADDRESS,\r\n amount: string,\r\n multisig?: MultisigRedeemScriptType,\r\n} | {\r\n address_n: Array,\r\n script_type: EnumOutputScriptType.PAYTOADDRESS | EnumOutputScriptType.PAYTOWITNESS | EnumOutputScriptType.PAYTOP2SHWITNESS | EnumOutputScriptType.PAYTOMULTISIG,\r\n amount: string,\r\n multisig?: MultisigRedeemScriptType,\r\n} | {\r\n amount: '0',\r\n op_return_data: Array,\r\n script_type: EnumOutputScriptType.PAYTOOPRETURN,\r\n};\r\n\r\ntype TransactionBinOutput = {\r\n amount: string,\r\n script_pubkey: string,\r\n};\r\n\r\nexport type RefTransaction = {\r\n hash: string,\r\n version?: number,\r\n inputs: Array,\r\n bin_outputs: Array,\r\n lock_time?: number,\r\n extra_data?: string,\r\n timestamp?: number,\r\n version_group_id?: number,\r\n};\r\n\r\nexport type TransactionOptions = {\r\n lock_time?: number,\r\n timestamp?: number,\r\n version?: number,\r\n expiry?: number,\r\n overwintered?: boolean,\r\n version_group_id?: number,\r\n branch_id?: number,\r\n};\r\n\r\nexport type TxRequestDetails = {\r\n request_index: number,\r\n tx_hash?: string,\r\n extra_data_len?: number,\r\n extra_data_offset?: number,\r\n};\r\n\r\nexport type TxRequestSerialized = {\r\n signature_index?: number,\r\n signature?: string,\r\n serialized_tx?: string,\r\n};\r\n\r\nexport enum eRequestType {\r\n 'TXINPUT',\r\n 'TXOUTPUT',\r\n 'TXMETA',\r\n 'TXFINISHED',\r\n 'TXEXTRADATA'\r\n}\r\n\r\nexport type TxRequest = {\r\n request_type: eRequestType,\r\n details: TxRequestDetails,\r\n serialized: TxRequestSerialized,\r\n};\r\n\r\nexport type SignedTx = {\r\n signatures: Array,\r\n serialized_tx: string,\r\n txid?: string,\r\n};\r\n\r\nexport type EthereumTxRequest = {\r\n data_length?: number,\r\n signature_v?: number,\r\n signature_r?: string,\r\n signature_s?: string,\r\n};\r\n\r\nexport type EthereumAddress = {\r\n address: string,\r\n};\r\n\r\nexport type EthereumSignedTx = {\r\n // v: number,\r\n v: string,\r\n r: string,\r\n s: string,\r\n};\r\n\r\nexport type EthereumSignedTypedData = {\r\n address: string,\r\n signature: string,\r\n}\r\n\r\nexport type Identity = {\r\n proto?: string,\r\n user?: string,\r\n host?: string,\r\n port?: string,\r\n path?: string,\r\n index?: number,\r\n};\r\n\r\nexport type SignedIdentity = {\r\n address: string,\r\n public_key: string,\r\n signature: string,\r\n};\r\n\r\nexport type PublicKey = {\r\n node: HDPubNode,\r\n xpub: string,\r\n};\r\n\r\n// combined PublicKey and bitcoin.HDNode\r\nexport type HDNodeResponse = {\r\n path: Array,\r\n serializedPath: string,\r\n childNum: number,\r\n xpub: string,\r\n xpubSegwit?: string,\r\n chainCode: string,\r\n publicKey: string,\r\n fingerprint: number,\r\n depth: number,\r\n};\r\n\r\n// this is what Prokey asks for\r\nexport type SignTxInfo = {\r\n inputs: Array,\r\n} | {\r\n bin_outputs: Array,\r\n} | {\r\n outputs: Array,\r\n} | {\r\n extra_data: string,\r\n} | {\r\n version: number,\r\n lock_time: number,\r\n inputs_cnt: number,\r\n outputs_cnt: number,\r\n extra_data_len?: number,\r\n timestamp:number,\r\n version_group_id: number,\r\n};\r\n\r\n// NEM types\r\nexport interface NEMGetAddress {\r\n address_n: Array, // BIP-32 path to derive the key from master node\r\n network: number, // Network ID (0x68 = Mainnet, 0x98 = Testnet, 0x60 = Mijin)\r\n show_display: boolean // Optionally show on display before sending the result\r\n}\r\n\r\nexport type NEMAddress = {\r\n address: string,\r\n}\r\n\r\nexport type NEMSignedTx = {\r\n data: string,\r\n signature: string,\r\n}\r\n\r\nexport type NEMTransactionCommon = {\r\n address_n: Array,\r\n network: number,\r\n timestamp: number,\r\n fee: number,\r\n deadline?: number,\r\n signer?: string,\r\n}\r\n\r\nexport type NEMMosaic = {\r\n namespace: string,\r\n mosaic: string,\r\n quantity: number,\r\n}\r\n\r\nexport type NEMTransfer = {\r\n mosaics?: Array,\r\n public_key?: string,\r\n recipient: string,\r\n amount: number,\r\n payload?: string,\r\n}\r\n\r\nexport type NEMProvisionNamespace = {\r\n namespace: string,\r\n sink: string,\r\n fee: number,\r\n parent?: string,\r\n}\r\n\r\nexport type NEMMosaicLevyType = {\r\n id: 1,\r\n name: 'MosaicLevy_Absolute',\r\n} | {\r\n id: 2,\r\n name: 'MosaicLevy_Percentile',\r\n}\r\n\r\nexport type NEMSupplyChangeType = {\r\n id: 1,\r\n name: 'SupplyChange_Increase',\r\n} | {\r\n id: 2,\r\n name: 'SupplyChange_Decrease',\r\n}\r\n\r\nexport type NEMModificationType = {\r\n id: 1,\r\n name: 'CosignatoryModification_Add',\r\n} | {\r\n id: 2,\r\n name: 'CosignatoryModification_Delete',\r\n}\r\n\r\nexport type NEMImportanceTransferMode = {\r\n id: 1,\r\n name: 'ImportanceTransfer_Activate',\r\n} | {\r\n id: 2,\r\n name: 'ImportanceTransfer_Deactivate',\r\n}\r\n\r\nexport type NEMMosaicDefinition = {\r\n name?: string,\r\n ticker?: string,\r\n namespace?: string,\r\n mosaic?: string,\r\n divisibility?: number,\r\n fee?: number,\r\n levy?: NEMMosaicLevyType,\r\n levy_address?: string,\r\n levy_namespace?: string,\r\n levy_mosaic?: string,\r\n supply?: number,\r\n mutable_supply?: boolean,\r\n transferable?: boolean,\r\n description?: string,\r\n networks?: number,\r\n}\r\n\r\nexport type NEMMosaicCreation = {\r\n definition?: NEMMosaicDefinition,\r\n sink: string,\r\n fee: number,\r\n}\r\n\r\nexport type NEMMosaicSupplyChange = {\r\n namespace?: string,\r\n type?: NEMSupplyChangeType,\r\n mosaic?: string,\r\n delta?: number,\r\n}\r\n\r\nexport type NEMCosignatoryModification = {\r\n type?: NEMModificationType,\r\n public_key?: string,\r\n}\r\n\r\nexport type NEMAggregateModification = {\r\n modifications?: Array,\r\n relative_change: number, // TODO: \"sint32\"\r\n}\r\n\r\nexport type NEMImportanceTransfer = {\r\n mode?: NEMImportanceTransferMode,\r\n public_key?: string,\r\n}\r\n\r\nexport type NEMSignTxMessage = {\r\n transaction?: NEMTransactionCommon,\r\n cosigning?: boolean,\r\n multisig?: NEMTransactionCommon,\r\n transfer?: NEMTransfer,\r\n provision_namespace?: NEMProvisionNamespace,\r\n mosaic_creation?: NEMMosaicCreation,\r\n supply_change?: NEMMosaicSupplyChange,\r\n aggregate_modification?: NEMAggregateModification,\r\n importance_transfer?: NEMImportanceTransfer,\r\n}\r\n\r\n// Stellar types\r\n\r\nexport type StellarAddress = {\r\n address: string,\r\n}\r\n\r\nexport type StellarSignedTx = {\r\n public_key: string,\r\n signature: string,\r\n}\r\n\r\nexport type StellarPaymentOp = {\r\n type: \"StellarTxOpRequest\",\r\n message: {},\r\n}\r\n\r\nexport type StellarSignTxMessage = {\r\n address_n: Array,\r\n source_account: string,\r\n fee: number,\r\n sequence_number: string,\r\n network_passphrase: string,\r\n timebounds_start?: number,\r\n timebounds_end?: number,\r\n memo_type?: number,\r\n memo_text?: string | typeof undefined,\r\n memo_id?: string | typeof undefined,\r\n memo_hash?: string | Buffer | typeof undefined,\r\n num_operations: number,\r\n}\r\n\r\nexport type StellarAsset = {\r\n type: 0 | 1 | 2,\r\n code: string,\r\n issuer?: string,\r\n}\r\n\r\nexport type StellarOperationMessage = {\r\n type: 'StellarCreateAccountOp',\r\n source_account?: string,\r\n new_account: string,\r\n starting_balance: string,\r\n} | {\r\n type: 'StellarPaymentOp',\r\n source_account?: string,\r\n destination_account: string,\r\n asset: StellarAsset | typeof undefined,\r\n amount: string,\r\n} | {\r\n type: 'StellarPathPaymentOp',\r\n source_account?: string,\r\n send_asset: StellarAsset,\r\n send_max: string,\r\n destination_account: string,\r\n destination_asset: StellarAsset,\r\n destination_amount: string,\r\n paths?: Array | typeof undefined,\r\n} | {\r\n type: 'StellarManageOfferOp',\r\n source_account?: string,\r\n offer_id?: string,\r\n amount: string,\r\n buying_asset: StellarAsset,\r\n selling_asset: StellarAsset,\r\n price_n: number,\r\n price_d: number,\r\n} | {\r\n type: 'StellarCreatePassiveOfferOp',\r\n source_account?: string,\r\n offer_id?: string,\r\n amount: string,\r\n buying_asset: StellarAsset,\r\n selling_asset: StellarAsset,\r\n price_n: number,\r\n price_d: number,\r\n} | {\r\n type: 'StellarSetOptionsOp',\r\n source_account?: string,\r\n signer_type?: number | typeof undefined,\r\n signer_key?: string | Buffer | typeof undefined,\r\n signer_weight?: number | typeof undefined,\r\n clear_flags: number,\r\n set_flags: number,\r\n master_weight?: (number | string),\r\n low_threshold?: (number | string),\r\n medium_threshold?: (number | string),\r\n high_threshold?: (number | string),\r\n home_domain: string,\r\n inflation_destination_account: string,\r\n} | {\r\n type: 'StellarChangeTrustOp',\r\n source_account?: string,\r\n asset: StellarAsset,\r\n limit?: string,\r\n} | {\r\n type: 'StellarAllowTrustOp',\r\n source_account?: string,\r\n trusted_account: string,\r\n asset_type: number,\r\n asset_code: string,\r\n is_authorized: number,\r\n} | {\r\n type: 'StellarAccountMergeOp',\r\n source_account?: string,\r\n destination_account: string,\r\n} | {\r\n type: 'StellarManageDataOp',\r\n source_account?: string,\r\n key: string,\r\n value: string | Buffer | typeof undefined,\r\n} | {\r\n type: 'StellarBumpSequenceOp',\r\n source_account?: string,\r\n bump_to: number,\r\n}\r\n\r\n// Tezos types\r\nexport type TezosAddress = {\r\n address: string,\r\n};\r\n\r\nexport type TezosPublicKey = {\r\n public_key: string,\r\n};\r\n\r\ntype TezosContractID = {\r\n tag: number,\r\n hash: Uint8Array,\r\n};\r\n\r\nexport type TezosRevealOp = {\r\n source: Uint8Array,\r\n fee: number,\r\n counter: number,\r\n gas_limit: number,\r\n storage_limit: number,\r\n public_key: Uint8Array,\r\n};\r\n\r\nexport type TezosManagerTransfer = {\r\n amount: number,\r\n destination: TezosContractID,\r\n};\r\n\r\nexport type TezosParametersManager = {\r\n set_delegate?: Uint8Array,\r\n cancel_delegate?: boolean,\r\n transfer?: TezosManagerTransfer,\r\n};\r\n\r\nexport type TezosTransactionOp = {\r\n source: Uint8Array,\r\n destination: TezosContractID,\r\n amount: number,\r\n counter: number,\r\n fee: number,\r\n gas_limit: number,\r\n storage_limit: number,\r\n parameters?: Array,\r\n parameters_manager?: TezosParametersManager,\r\n};\r\n\r\nexport type TezosOriginationOp = {\r\n source: Uint8Array,\r\n balance: number,\r\n delegate?: Uint8Array,\r\n fee: number,\r\n counter: number,\r\n gas_limit: number,\r\n storage_limit: number,\r\n script: Array,\r\n};\r\n\r\nexport type TezosDelegationOp = {\r\n source: Uint8Array,\r\n delegate: Uint8Array,\r\n fee: number,\r\n counter: number,\r\n gas_limit: number,\r\n storage_limit: number,\r\n};\r\n\r\nexport type TezosTransaction = {\r\n address_n: Array,\r\n branch: Uint8Array,\r\n reveal?: TezosRevealOp,\r\n transaction?: TezosTransactionOp,\r\n origination?: TezosOriginationOp,\r\n delegation?: TezosDelegationOp,\r\n};\r\n\r\nexport type TezosSignedTx = {\r\n signature: string,\r\n sig_op_contents: string,\r\n operation_hash: string,\r\n};\r\n\r\n// Cardano types\r\nexport type CardanoAddress = {\r\n address: string,\r\n address_n?: Array,\r\n};\r\n\r\nexport type CardanoPublicKey = {\r\n xpub: string,\r\n node: HDPubNode,\r\n};\r\n\r\nexport type CardanoSignedTx = {\r\n tx_hash: string,\r\n tx_body: string,\r\n};\r\nexport type CardanoTxInput = {\r\n tx_hash: string,\r\n address_n: Array,\r\n output_index: number,\r\n type?: number,\r\n};\r\nexport type CardanoTxOutput = {\r\n address?: string,\r\n address_n?: Array,\r\n amount: string,\r\n};\r\n\r\nexport type CardanoTxRequest = {\r\n tx_index: number,\r\n tx_hash: string,\r\n tx_body: string,\r\n};\r\n\r\n// Lisk types\r\nexport type LiskAddress = {\r\n address: string,\r\n}\r\n\r\nexport type LiskPublicKey = {\r\n public_key: string,\r\n}\r\n\r\nexport type LiskMessageSignature = {\r\n public_key: string,\r\n signature: string,\r\n};\r\n\r\nexport type LiskAsset =\r\n { data: string } |\r\n { votes: Array } |\r\n { delegate: { username: string } } |\r\n { signature: { public_key: string } } |\r\n {\r\n multisignature: {\r\n min: number,\r\n life_time: number,\r\n keys_group: Array,\r\n },\r\n };\r\n\r\nexport type LiskTransaction = {\r\n type: number,\r\n fee: string,\r\n amount: string,\r\n timestamp: number,\r\n recipient_id?: string,\r\n sender_public_key?: string,\r\n requester_public_key?: string,\r\n signature?: string,\r\n asset?: LiskAsset,\r\n}\r\n\r\nexport type LiskSignedTx = {\r\n signature: string,\r\n}\r\n\r\n// Ripple types\r\nexport type RippleAddress = {\r\n address: string,\r\n}\r\n\r\nexport type RippleTransaction = {\r\n address_n: Array,\r\n fee?: number,\r\n flags?: number,\r\n sequence?: number,\r\n last_ledger_sequence?: number,\r\n payment: {\r\n amount: number,\r\n destination: string,\r\n destination_tag?: number\r\n },\r\n}\r\n\r\nexport type RippleSignedTx = {\r\n signature: string,\r\n serialized_tx: string,\r\n}\r\n\r\n// EOS types\r\nexport type EosPublicKey = {\r\n wif_public_key: string,\r\n raw_public_key: string,\r\n}\r\n\r\nexport type EosTxActionRequest = {\r\n data_size: number,\r\n}\r\n\r\nexport type EosTxHeader = {\r\n expiration: number,\r\n ref_block_num: number,\r\n ref_block_prefix: number,\r\n max_net_usage_words: number,\r\n max_cpu_usage_ms: number,\r\n delay_sec: number,\r\n}\r\n\r\nexport type EosSignTx = {\r\n address_n: Array,\r\n chain_id: string,\r\n header?: EosTxHeader,\r\n num_actions: number,\r\n}\r\n\r\nexport type EosAsset = {\r\n amount: string, // uint64 as string\r\n symbol: string, // uint64 as string\r\n}\r\n\r\nexport type EosPermissionLevel = {\r\n actor: string, // uint64 as string\r\n permission: string, // uint64 as string\r\n}\r\n\r\nexport type EosAuthorizationKey = {\r\n type: number,\r\n key: string,\r\n // address_n?: Array, // this field is not implemented in FW\r\n weight: number,\r\n}\r\n\r\nexport type EosAuthorization = {\r\n threshold: number,\r\n keys: Array,\r\n accounts: Array<{\r\n account: EosPermissionLevel,\r\n weight: number,\r\n }>,\r\n waits: Array<{\r\n wait_sec: number,\r\n weight: number,\r\n }>,\r\n}\r\n\r\nexport type EosActionCommon = {\r\n account: string, // uint64 as string\r\n name: string, // uint64 as string\r\n authorization: Array,\r\n}\r\n\r\nexport type EosActionTransfer = {\r\n sender: string, // uint64 as string\r\n receiver: string, // uint64 as string\r\n quantity: EosAsset,\r\n memo?: string,\r\n}\r\n\r\nexport type EosActionDelegate = {\r\n sender: string, // uint64 as string\r\n receiver: string, // uint64 as string\r\n net_quantity: EosAsset,\r\n cpu_quantity: EosAsset,\r\n transfer?: boolean,\r\n}\r\n\r\nexport type EosActionUndelegate = {\r\n sender: string, // uint64 as string\r\n receiver: string, // uint64 as string\r\n net_quantity: EosAsset,\r\n cpu_quantity: EosAsset,\r\n}\r\n\r\nexport type EosActionBuyRam = {\r\n payer: string, // uint64 as string\r\n receiver: string, // uint64 as string\r\n quantity: EosAsset,\r\n}\r\n\r\nexport type EosActionBuyRamBytes = {\r\n payer: string, // uint64 as string\r\n receiver: string, // uint64 as string\r\n bytes: number,\r\n}\r\n\r\nexport type EosActionSellRam = {\r\n account: string, // uint64 as string\r\n bytes: number,\r\n}\r\n\r\nexport type EosActionVoteProducer = {\r\n voter: string, // uint64 as string\r\n proxy: string, // uint64 as string\r\n producers: Array, // uint64[] as string\r\n}\r\n\r\nexport type EosActionRefund = {\r\n owner: string, // uint64 as string\r\n}\r\n\r\nexport type EosActionUpdateAuth = {\r\n account: string, // uint64 as string\r\n permission: string, // uint64 as string\r\n parent: string, // uint64 as string\r\n auth: EosAuthorization,\r\n}\r\n\r\nexport type EosActionDeleteAuth = {\r\n account: string, // uint64 as string\r\n permission: string, // uint64 as string\r\n}\r\n\r\nexport type EosActionLinkAuth = {\r\n account: string, // uint64 as string\r\n code: string, // uint64 as string\r\n type: string, // uint64 as string\r\n requirement: string, // uint64 as string\r\n}\r\n\r\nexport type EosActionUnlinkAuth = {\r\n account: string, // uint64 as string\r\n code: string, // uint64 as string\r\n type: string, // uint64 as string\r\n}\r\n\r\nexport type EosActionNewAccount = {\r\n creator: string, // uint64 as string\r\n name: string, // uint64 as string\r\n owner: EosAuthorization,\r\n active: EosAuthorization,\r\n}\r\n\r\nexport type EosActionUnknown = {\r\n data_size: number,\r\n data_chunk: string,\r\n}\r\n\r\nexport type EosTxActionAck = {\r\n common?: EosActionCommon,\r\n transfer?: EosActionTransfer,\r\n delegate?: EosActionDelegate,\r\n undelegate?: EosActionUndelegate,\r\n refund?: EosActionRefund,\r\n buy_ram?: EosActionBuyRam,\r\n buy_ram_bytes?: EosActionBuyRamBytes,\r\n sell_ram?: EosActionSellRam,\r\n vote_producer?: EosActionVoteProducer,\r\n update_auth?: EosActionUpdateAuth,\r\n delete_auth?: EosActionDeleteAuth,\r\n link_auth?: EosActionLinkAuth,\r\n unlink_auth?: EosActionUnlinkAuth,\r\n new_account?: EosActionNewAccount,\r\n unknown?: EosActionUnknown,\r\n}\r\n\r\nexport type EosSignedTx = {\r\n signature: string,\r\n}\r\n\r\n// Binance types\r\nexport type BinanceAddress = {\r\n address: string,\r\n}\r\n\r\nexport type BinancePublicKey = {\r\n public_key: string,\r\n}\r\n\r\nexport type BinanceSignTx = {\r\n address_n: Array,\r\n msg_count: number,\r\n chain_id: string,\r\n account_number: number,\r\n memo?: string,\r\n sequence: number,\r\n source: number,\r\n}\r\n\r\nexport type BinanceTxRequest = {\r\n\r\n}\r\n\r\nexport type BinanceInputOutput = {\r\n address: string,\r\n coins: {\r\n amount: number,\r\n denom: string,\r\n },\r\n}\r\n\r\nexport type BinanceTransferMsg = {\r\n inputs: BinanceInputOutput[],\r\n outputs: BinanceInputOutput[],\r\n}\r\n\r\nexport type BinanceOrderMsg = {\r\n id: string,\r\n ordertype: number, // 'OT_UNKNOWN' | 'MARKET' | 'LIMIT' | 'OT_RESERVED',\r\n price: number,\r\n quantity: number,\r\n sender: string,\r\n side: number, // 'SIDE_UNKNOWN' | 'BUY' | 'SELL',\r\n symbol: string,\r\n timeinforce: number, // 'TIF_UNKNOWN' | 'GTE' | 'TIF_RESERVED' | 'IOC',\r\n}\r\n\r\nexport type BinanceCancelMsg = {\r\n refid: string,\r\n sender: string,\r\n symbol: string,\r\n}\r\n\r\nexport type BinanceMessage = BinanceTransferMsg | BinanceOrderMsg | BinanceCancelMsg;\r\n\r\nexport type BinanceSignedTx = {\r\n signature: string,\r\n public_key: string,\r\n}\r\n\r\n// GetAddress response\r\nexport type AddressModel = {\r\n address: string,\r\n path: Array,\r\n}\r\n\r\n// Reset device flags\r\nexport type ResetDeviceFlags = {\r\n display_random?: boolean,\r\n strength?: number,\r\n passphrase_protection?: boolean,\r\n pin_protection?: boolean,\r\n language?: string,\r\n label?: string,\r\n u2f_counter?: number,\r\n skip_backup?: boolean,\r\n no_backup?: boolean,\r\n}\r\n\r\nexport type FirmwareErase = {\r\n length?: number,\r\n};\r\n\r\nexport type FirmwareUpload = {\r\n payload: Buffer,\r\n length: number,\r\n // hash?: string,\r\n}\r\n\r\nexport type ChangePin = {\r\n remove?: boolean,\r\n}\r\n\r\nexport type Flags = {\r\n flags: number,\r\n}\r\n\r\nexport type DebugLinkDecision = {\r\n yes_no?: boolean,\r\n up_down?: boolean,\r\n input?: string,\r\n}\r\n\r\nexport type DebugLinkState = {\r\n layout: string,\r\n pin: string,\r\n matrix: string,\r\n mnemonic: string,\r\n node: HDNode,\r\n passphrase_protection: boolean,\r\n reset_word: string,\r\n reset_entropy: string,\r\n recovery_fake_word: string,\r\n recovery_word_pos: number,\r\n reset_word_pos: number,\r\n}\r\n\r\nexport type LoadDeviceFlags = {\r\n mnemonics?: Array,\r\n mnemonic?: string,\r\n node?: HDNode,\r\n pin?: string,\r\n passphrase_protection?: boolean,\r\n language?: string,\r\n label?: string,\r\n skip_checksum?: boolean,\r\n u2f_counter?: number,\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { MyConsole } from './../utils/console';\r\nimport { Root, Type, IParseOptions, util, configure } from 'protobufjs';\r\nconst Long = require('./long');\r\n\r\nexport class Protobuf {\r\n private static _instance: Protobuf;\r\n private _pbroot: Root;\r\n private _isInited = false;\r\n\r\n private constructor() {\r\n this._pbroot = new Root();\r\n }\r\n\r\n public static get Instance() {\r\n if (this._instance === undefined) {\r\n this._instance = new Protobuf();\r\n\r\n // Force protobuf to use Long module for uint64\r\n util.Long = Long;\r\n configure();\r\n }\r\n\r\n return this._instance;\r\n }\r\n\r\n Init(callback?: (isSuccess: boolean) => void, protoPath?: string): void {\r\n let address = '/assets/data/protob/combined.proto.txt';\r\n if(protoPath != null){\r\n address = `${protoPath}/combined.proto.txt`;\r\n }\r\n\r\n const opt: IParseOptions = {\r\n keepCase: true,\r\n }\r\n\r\n this._pbroot.load(address, opt).then((root: Root) => {\r\n this._isInited = true;\r\n if (callback) {\r\n callback(true);\r\n }\r\n }).catch((reason) => {\r\n if (callback) {\r\n callback(false);\r\n }\r\n });\r\n }\r\n\r\n get IsInited() { return this._isInited; }\r\n\r\n GetMessageByName(name: string): Type | null {\r\n if (this._isInited === false) {\r\n MyConsole.Error('The protobuf is not inited yet');\r\n return null;\r\n }\r\n\r\n const msg = this._pbroot.lookupType(name);\r\n if (msg === null) {\r\n MyConsole.Error('Protobuf::GetMessageByName-> Cannot find message name ' + name);\r\n return null;\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n GetMessageTypeById(id: number): string | null {\r\n try {\r\n const item = this._pbroot.lookupEnum('MessageType').valuesById[id];\r\n return item.substring(item.indexOf('_') + 1);\r\n } catch (e) {\r\n MyConsole.Exception('Protobuf::GetMessageTypeById->' + e);\r\n return null;\r\n }\r\n }\r\n\r\n GetMessageTypeIdByName(typeName: string): number | null {\r\n try {\r\n const item = this._pbroot.lookupEnum('MessageType').values['MessageType_' + typeName];\r\n return item;\r\n } catch (e) {\r\n MyConsole.Exception('Protobuf::GetMessageIdByType->' + e);\r\n return null;\r\n }\r\n }\r\n\r\n GetMessageById(id: number): Type | null {\r\n try {\r\n const item = this._pbroot.lookupEnum('MessageType').valuesById[id];\r\n const msgName = item.substring(item.indexOf('_') + 1);\r\n const msg = this._pbroot.lookupType(msgName);\r\n if (msg === null) {\r\n MyConsole.Error('Protobuf::GetMessageById-> Cannot find message id ' + id);\r\n return null;\r\n }\r\n\r\n return msg;\r\n\r\n } catch (e) {\r\n MyConsole.Exception('Protobuf::GetMessageById->' + e);\r\n return null;\r\n }\r\n\r\n }\r\n\r\n GetEnumNameByValue(enumName: string, id: number): string | null {\r\n try {\r\n const item = this._pbroot.lookupEnum(enumName);\r\n if (item) {\r\n return item.valuesById[id];\r\n } else {\r\n MyConsole.Error('Cannot find the enum name ' + enumName );\r\n return null;\r\n }\r\n } catch (e) {\r\n MyConsole.Exception('Protobuf::GetEnumNameByValue->' + e);\r\n return null;\r\n }\r\n }\r\n\r\n GetEnumValueByName(enumName: string, memberName: string): number | null {\r\n try {\r\n const item = this._pbroot.lookupEnum(enumName);\r\n if (item) {\r\n return item.values[memberName];\r\n } else {\r\n MyConsole.Error('Cannot find the enum name ' + enumName );\r\n return null;\r\n }\r\n } catch (e) {\r\n MyConsole.Error('Protobuf::GetEnumValueByName->' + e);\r\n return null;\r\n }\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { GeneralResponse } from '../models/GeneralResponse';\r\n\r\nexport enum TransportType\r\n{\r\n WebUsb,\r\n WebSocket\r\n}\r\n\r\nexport interface IMessagePayload {\r\n MsgId: number,\r\n Lenght: number,\r\n ProtoPayload: Uint8Array,\r\n}\r\n\r\nexport type ITransport = {\r\n onReceiveCallback: (msgPayload: IMessagePayload) => void;\r\n onDeviceDisconnect: () => void;\r\n Init(isDebug?: boolean, onReceiveCallback?: (msgPayload: IMessagePayload) => void): Promise;\r\n Open(path?: string): Promise;\r\n SendProtoMsg(msgId: number, data: Uint8Array): Promise;\r\n Close(): void;\r\n IsOpen(): boolean;\r\n}","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Ali Akbar Mohammadi\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { GeneralErrors, GeneralResponse } from \"../models/GeneralResponse\";\r\nimport { IMessagePayload, ITransport } from \"./ITransport\";\r\nimport { IMessageEvent, w3cwebsocket } from \"websocket\";\r\nimport { MyConsole } from \"../utils/console\";\r\n\r\nexport class WebSocketTransport implements ITransport {\r\n onReceiveCallback!: (msgPayload: IMessagePayload) => void;\r\n onDeviceDisconnect!: () => void;\r\n\r\n _ws: WebSocket;\r\n _isConnected: boolean = false;\r\n _msgBuffer: Array = new Array();\r\n _msgResolver: any;\r\n\r\n constructor()\r\n {\r\n this._ws = new WebSocket(\"ws://localhost:55500\");\r\n }\r\n\r\n public async Init(isDebug?: boolean, onReceiveCallback?: (msgPayload: IMessagePayload) => void): Promise {\r\n if (onReceiveCallback) {\r\n this.onReceiveCallback = onReceiveCallback;\r\n }\r\n return { success: true };\r\n }\r\n\r\n public async Open(path?: string): Promise {\r\n if (!this._isConnected) {\r\n this._ws.binaryType = 'arraybuffer';\r\n this._ws.onmessage = (message: IMessageEvent) => {\r\n console.debug(message);\r\n if (message.data instanceof ArrayBuffer)\r\n this._msgBuffer.push(new Uint8Array(message.data));\r\n if (this._msgResolver != null) {\r\n this._msgResolver();\r\n this._msgResolver = null;\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n this._ws.onopen = () => {\r\n this._isConnected = true;\r\n resolve({ success: true });\r\n };\r\n this._ws.onclose = (event) => {\r\n this._isConnected = false;\r\n if (this.onDeviceDisconnect != null)\r\n this.onDeviceDisconnect();\r\n resolve({ success: false, errorCode: GeneralErrors.NO_DEVICE });\r\n };\r\n this._ws.onerror = (err) => {\r\n console.error(err);\r\n resolve({ success: false, errorCode: GeneralErrors.NO_DEVICE });\r\n }\r\n });\r\n }\r\n return { success: true };\r\n }\r\n\r\n public async SendProtoMsg(msgId: number, data: Uint8Array): Promise {\r\n const bf = new Uint8Array(data.length + 6);\r\n let n = 0;\r\n\r\n // MsgType\r\n bf[n++] = msgId >> 8;\r\n bf[n++] = msgId & 0xFF;\r\n\r\n // Lenght of data\r\n bf[n++] = data.length >> 24;\r\n bf[n++] = data.length >> 16;\r\n bf[n++] = data.length >> 8;\r\n bf[n++] = data.length;\r\n\r\n // Data\r\n for (let i = 0; i < data.length; i++) {\r\n bf[n++] = data[i];\r\n }\r\n\r\n let res = await this.SendData(bf);\r\n if (res.success == false)\r\n return res;\r\n\r\n res = await this.ReceiveData();\r\n if (res.success) {\r\n if (this.onReceiveCallback != null) {\r\n this.onReceiveCallback(res.payload);\r\n }\r\n\r\n return res;\r\n }\r\n else if (res.errorCode == GeneralErrors.NO_DEVICE && this.onDeviceDisconnect != null) {\r\n this.onDeviceDisconnect();\r\n }\r\n\r\n return res;\r\n }\r\n\r\n public async SendData(bMsg: Uint8Array): Promise {\r\n if (!this._isConnected) {\r\n return { success: false, errorCode: GeneralErrors.NO_DEVICE };\r\n }\r\n\r\n let l = bMsg.length;\r\n let bDataToSend = new Uint8Array(64);\r\n var firstPacket = true;\r\n var n = 0;\r\n var msgOutIndex = 0;\r\n\r\n while (l > 0) {\r\n n = 0;\r\n if (firstPacket) {\r\n firstPacket = false;\r\n bDataToSend[n++] = 0x3F;\r\n bDataToSend[n++] = 0x23;\r\n bDataToSend[n++] = 0x23;\r\n }\r\n else {\r\n bDataToSend[n++] = 0x3F;\r\n }\r\n\r\n while (n < 64) {\r\n if (l > 0) {\r\n l--;\r\n bDataToSend[n++] = bMsg[msgOutIndex++];\r\n }\r\n else\r\n bDataToSend[n++] = 0x00; // Padding\r\n }\r\n\r\n this._ws.send(bDataToSend.buffer);\r\n }\r\n\r\n return { success: true };\r\n }\r\n\r\n private async WaitForData(): Promise {\r\n if (this._msgBuffer.length == 0) {\r\n if (!this._isConnected)\r\n return;\r\n return new Promise((res, rej) => {\r\n this._msgResolver = res;\r\n });\r\n }\r\n }\r\n\r\n public async ReceiveData(): Promise {\r\n let recData: Uint8Array = new Uint8Array();\r\n var msgLen = 0;\r\n let firstPacket = true;\r\n let msgId = 0;\r\n let n = 0;\r\n var tmpLen = 0;\r\n\r\n while (true) {\r\n await this.WaitForData();\r\n let res: Uint8Array;\r\n let f = this._msgBuffer.shift();\r\n if (f != undefined) {\r\n res = f;\r\n }\r\n else {\r\n return { success: false, errorCode: GeneralErrors.NO_RESPONSE_FROM_DEVICE };\r\n }\r\n\r\n if (firstPacket) {\r\n\r\n var buf = res;\r\n // Check start bytes\r\n if (buf[0] != 0x3F || buf[1] != 0x23 || buf[2] != 0x23) {\r\n return {\r\n success: false,\r\n errorCode: GeneralErrors.PROTO_ERR\r\n };\r\n }\r\n\r\n firstPacket = false;\r\n\r\n // message ID\r\n msgId = buf[3] << 8;\r\n msgId |= buf[4];\r\n\r\n // message data length\r\n msgLen = buf[5] << 24;\r\n msgLen |= buf[6] << 16;\r\n msgLen |= buf[7] << 8;\r\n msgLen |= buf[8];\r\n\r\n recData = new Uint8Array(msgLen);\r\n\r\n // Max data len here can be 55 bytes\r\n let l = (msgLen > 55) ? 55 : msgLen;\r\n tmpLen = msgLen - l;\r\n\r\n for (let i = 0; i < l; i++)\r\n recData[n++] = buf[i + 9];\r\n }\r\n else {\r\n var buf = res;\r\n\r\n // validate start byte\r\n if (buf[0] != 0x3F) {\r\n return {\r\n success: false,\r\n errorCode: GeneralErrors.PROTO_ERR\r\n };\r\n }\r\n\r\n // Max data len here can be 63 bytes\r\n let l = (tmpLen > 63) ? 63 : tmpLen;\r\n tmpLen -= l;\r\n\r\n for (let i = 0; i < l; i++)\r\n recData[n++] = buf[i + 1];\r\n }\r\n\r\n if (tmpLen > 0) //! still have more data\r\n continue;\r\n\r\n return {\r\n success: true,\r\n payload: {\r\n MsgId: msgId,\r\n Lenght: msgLen,\r\n ProtoPayload: recData,\r\n }\r\n };\r\n }\r\n }\r\n\r\n public IsOpen(): boolean {\r\n return this._isConnected;\r\n }\r\n\r\n Close(): void {\r\n this._ws.close();\r\n }\r\n}","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\nimport { MyConsole } from '../utils/console';\r\nimport * as Utils from '../utils/utils';\r\nimport { IMessagePayload, ITransport } from './ITransport'\r\nimport { GeneralResponse, GeneralErrors } from '../models/GeneralResponse';\r\n\r\ndeclare global {\r\n interface Navigator {\r\n // @ts-ignore\r\n usb: {\r\n getDevices(): any[];\r\n }\r\n }\r\n}\r\n\r\nexport class WebUsb implements ITransport {\r\n onReceiveCallback!: (msgPayload: IMessagePayload) => void;\r\n onDeviceDisconnect!: () => void;\r\n\r\n _usb: any;\r\n _port: any;\r\n _intervalId: any = null;\r\n\r\n prokeyFilters = [\r\n { vendorId: 0x1209, productId: 0xAAAA },\r\n { vendorId: 0x1364, productId: 0x0001 }\r\n ];\r\n\r\n constructor() {\r\n this._usb = navigator.usb;\r\n }\r\n\r\n public async Init(isDebug?: boolean, onReceiveCallback?: (msgPayload: IMessagePayload) => void): Promise {\r\n if(onReceiveCallback) {\r\n this.onReceiveCallback = onReceiveCallback;\r\n }\r\n //! Get USB device instance\r\n return await this._enumerate();\r\n }\r\n\r\n public async Open(path?: string): Promise {\r\n\r\n //! Open USB device\r\n let res = await this._acquire();\r\n if(res.success == false){\r\n return res;\r\n }\r\n\r\n this._usb.addEventListener('disconnect', () => {\r\n if (this.onDeviceDisconnect != null) {\r\n this.onDeviceDisconnect();\r\n }\r\n })\r\n\r\n return res;\r\n }\r\n\r\n public async SendProtoMsg(msgId: number, data: Uint8Array): Promise {\r\n const bf = new Uint8Array(data.length + 6);\r\n let n = 0;\r\n\r\n // MsgType\r\n bf[n++] = msgId >> 8;\r\n bf[n++] = msgId & 0xFF;\r\n\r\n // Lenght of data\r\n bf[n++] = data.length >> 24;\r\n bf[n++] = data.length >> 16;\r\n bf[n++] = data.length >> 8;\r\n bf[n++] = data.length;\r\n\r\n // Data\r\n for(let i=0; i {\r\n if (this._port === undefined || this._port == null) {\r\n return { success: false, errorCode: GeneralErrors.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n var bMsg = Utils.HexStringToByteArray(data);\r\n this.SendData(bMsg);\r\n\r\n let recStr: string = \"\";\r\n var len = 0;\r\n let firstPacket = true;\r\n var isValid = true;\r\n\r\n while (true) {\r\n const res = await this._port.transferIn(1, 64);\r\n\r\n if (res.status == \"stall\") {\r\n this._port.clearHalt(\"in\", 1);\r\n continue;\r\n }\r\n\r\n // TODO: Handle babble status\r\n //if (res.status == \"babble\") //! still have more data\r\n //continue;\r\n\r\n if (firstPacket) {\r\n firstPacket = false;\r\n\r\n var uint8View = new Uint8Array(res.data.buffer);\r\n len = uint8View[5] << 24;\r\n len |= uint8View[6] << 16;\r\n len |= uint8View[7] << 8;\r\n len |= uint8View[8];\r\n\r\n var rawStr: string = Buffer.from(res.data.buffer).toString('hex');\r\n\r\n // validate start bytes\r\n if (rawStr.substring(0, 6).toLowerCase() != '3f2323')\r\n isValid = false; //! Can not return err right now because maybe there are some IN data in the USB buffer\r\n\r\n //! Remove '?##\" characters from data\r\n recStr = rawStr.substring(6);\r\n }\r\n else {\r\n var rawStr: string = Buffer.from(res.data.buffer).toString('hex');\r\n\r\n // validate start byte\r\n if (rawStr.substring(0, 2).toLowerCase() != '3f')\r\n isValid = false;\r\n\r\n //! Remove '?' characted from data\r\n recStr += rawStr.substring(2);\r\n }\r\n\r\n len -= 64;\r\n if (len > 0) //! still have more data\r\n continue;\r\n\r\n if (isValid)\r\n return { success: true, payload: recStr };\r\n else\r\n return { success: false, errorCode: GeneralErrors.PROTO_ERR };\r\n }\r\n }\r\n\r\n public async SendData(bMsg: Uint8Array): Promise {\r\n if (this._port === undefined || this._port == null) {\r\n return { success: false, errorCode: GeneralErrors.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n let l = bMsg.length;\r\n let bDataToSend = new Uint8Array(64);\r\n var firstPacket = true;\r\n var n = 0;\r\n var msgOutIndex = 0;\r\n\r\n while (l > 0) {\r\n n = 0;\r\n if (firstPacket) {\r\n firstPacket = false;\r\n bDataToSend[n++] = 0x3F;\r\n bDataToSend[n++] = 0x23;\r\n bDataToSend[n++] = 0x23;\r\n }\r\n else {\r\n bDataToSend[n++] = 0x3F;\r\n }\r\n\r\n while (n < 64) {\r\n if (l > 0) {\r\n l--;\r\n bDataToSend[n++] = bMsg[msgOutIndex++];\r\n }\r\n else\r\n bDataToSend[n++] = 0x00; // Padding\r\n }\r\n \r\n await this._port.transferOut(1, bDataToSend);\r\n }\r\n\r\n return { success: true };\r\n }\r\n\r\n public async ReceiveData(): Promise {\r\n let recData: Uint8Array = new Uint8Array();\r\n var msgLen = 0;\r\n let firstPacket = true;\r\n let msgId = 0;\r\n let n = 0;\r\n var tmpLen = 0;\r\n\r\n\r\n while (true) {\r\n let res;\r\n try {\r\n res = await this._port.transferIn(1, 64);\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n MyConsole.Exception(\"WebUsb::ReceiveData\", e);\r\n if (e.name == \"NotFoundError\") {\r\n return {\r\n success: false,\r\n errorMessage: \"The device was disconnected\",\r\n errorCode: GeneralErrors.NO_DEVICE,\r\n };\r\n } else if(e.name == \"NetworkError\") {\r\n return {\r\n success: false,\r\n errorMessage: \"USB disconnect\",\r\n errorCode: GeneralErrors.NO_DEVICE,\r\n }\r\n }\r\n\r\n }\r\n return {\r\n success: false,\r\n errorCode: GeneralErrors.UNKNOWN,\r\n };\r\n }\r\n\r\n if (res.status == \"stall\") {\r\n this._port.clearHalt(\"in\", 1);\r\n continue;\r\n }\r\n\r\n if (firstPacket) {\r\n \r\n var buf = new Uint8Array(res.data.buffer);\r\n // Check start bytes\r\n if (buf[0] != 0x3F || buf[1] != 0x23 || buf[2] != 0x23) {\r\n return { \r\n success: false, \r\n errorCode: GeneralErrors.PROTO_ERR \r\n };\r\n }\r\n\r\n firstPacket = false;\r\n\r\n // message ID\r\n msgId = buf[3] << 8;\r\n msgId |= buf[4];\r\n\r\n // message data length\r\n msgLen = buf[5] << 24;\r\n msgLen |= buf[6] << 16;\r\n msgLen |= buf[7] << 8;\r\n msgLen |= buf[8];\r\n\r\n recData = new Uint8Array(msgLen);\r\n\r\n // Max data len here can be 55 bytes\r\n let l = (msgLen > 55) ? 55 : msgLen;\r\n tmpLen = msgLen - l;\r\n\r\n for (let i = 0; i < l; i++)\r\n recData[n++] = buf[i + 9];\r\n }\r\n else {\r\n var buf = new Uint8Array(res.data.buffer);\r\n\r\n // validate start byte\r\n if (buf[0] != 0x3F) {\r\n return { \r\n success: false, \r\n errorCode: GeneralErrors.PROTO_ERR \r\n };\r\n }\r\n\r\n // Max data len here can be 63 bytes\r\n let l = (tmpLen > 63) ? 63 : tmpLen;\r\n tmpLen -= l;\r\n\r\n for (let i = 0; i < l; i++)\r\n recData[n++] = buf[i + 1];\r\n }\r\n\r\n if (tmpLen > 0) //! still have more data\r\n continue;\r\n\r\n return {\r\n success: true, \r\n payload: {\r\n MsgId: msgId,\r\n Lenght: msgLen,\r\n ProtoPayload: recData,\r\n }\r\n };\r\n }\r\n }\r\n\r\n public IsOpen(): boolean {\r\n if(this._port == null || this.Open == null)\r\n return false;\r\n\r\n return this._port.opened;\r\n }\r\n\r\n async delay(ms: number): Promise {\r\n await new Promise(resolve => setTimeout(() => resolve(), ms)).then(() => console.log(\"fired\"));\r\n }\r\n\r\n Close(): void {\r\n\r\n }\r\n\r\n private async _enumerate(): Promise {\r\n if (this._usb === undefined || this._usb == null) {\r\n return { success: false, errorCode: GeneralErrors.NO_WEB_USB };\r\n }\r\n\r\n let devices = await this._usb.getDevices();\r\n\r\n if (devices == null) {\r\n return { success: false, errorCode: GeneralErrors.NO_DEVICE };\r\n }\r\n\r\n // TODO: Handle more than one device \r\n // Check the devices which has been selected before\r\n for (let i = 0; i < devices.length; i++) {\r\n var existDevice = devices[i];\r\n\r\n for(let j=0; j< this.prokeyFilters.length; j++){\r\n // TODO: Check other Vendor & Product IDs\r\n if (existDevice.vendorId == this.prokeyFilters[j].vendorId && existDevice.productId == this.prokeyFilters[j].productId) {\r\n this._port = existDevice;\r\n\r\n return { success: true, payload: existDevice };\r\n }\r\n }\r\n }\r\n\r\n\r\n // Now a popup will be shown by the browser to let the user to select a Device\r\n // We'll get an exception if the user cancel this popup though\r\n try {\r\n let device = await this._usb.requestDevice({ filters: this.prokeyFilters });\r\n if (device == null) {\r\n return { success: false, errorCode: GeneralErrors.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n this._port = device;\r\n\r\n return { success: true, payload: device };\r\n }\r\n catch (ex) {\r\n return { success: false, errorCode: GeneralErrors.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n }\r\n\r\n private async _acquire(): Promise {\r\n if (this._port === undefined || this._port == null) {\r\n return { success: false, errorCode: GeneralErrors.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n try {\r\n await this._port.open();\r\n\r\n // Select device configuration 1 -> Prokey Optimum\r\n if (this._port.configuration === null) {\r\n await this._port.selectConfiguration(1);\r\n }\r\n\r\n // Select first interface. (The second one is for 2FA)\r\n await this._port.claimInterface(0);\r\n\r\n return { success: true, payload: this._port };\r\n }\r\n catch (_) {\r\n return { success: false, errorCode: GeneralErrors.CAN_NOT_OPEN_USB };\r\n }\r\n }\r\n}","import compareVersions from 'compare-versions';\r\nimport { Features } from '../models/Prokey';\r\nimport { EIP1559_DEVICE_MINIMUM_VERSION_SUPPORT } from './constants';\r\n\r\nexport const getDeviceVersion = (features: Features) =>\r\n `${features.major_version}.${features.minor_version}.${features.patch_version}`;\r\n\r\nexport const supportsEIP1559 = (features: Features, network: string) =>\r\n compareVersions(getDeviceVersion(features), EIP1559_DEVICE_MINIMUM_VERSION_SUPPORT) != -1 && network === 'eth';\r\n","var WAValidator = require('multicoin-address-validator');\r\nimport { CoinBaseType } from \"../../src/coins/CoinInfo\";\r\n\r\nexport function IsAddressValid(address: string, coinType: CoinBaseType, symbol: string, isTest?: boolean): boolean{\r\n //! these coins are use same address encoding model\r\n if (coinType == CoinBaseType.ERC20 || coinType == CoinBaseType.EthereumBase) {\r\n symbol = \"ETH\";\r\n } \r\n else if (isTest != null && isTest == true){\r\n if (symbol.substring(0, 1) == 't') {\r\n symbol = symbol.substring(1);\r\n }\r\n }\r\n\r\n if (!WAValidator.findCurrency(symbol)) {\r\n return false;\r\n }\r\n\r\n if (isTest != null && isTest == true) {\r\n if (WAValidator.validate(address, symbol, 'testnet')) {\r\n return true;\r\n }\r\n } else {\r\n if (WAValidator.validate(address, symbol)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n *\r\n * Hadi Robati, hadi@prokey.io\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\nimport * as Utility from './utils';\r\n\r\nexport enum LogLevel {\r\n INFO,\r\n WARNING,\r\n ERROR,\r\n EXCEPTION,\r\n}\r\n\r\nexport class MyConsole {\r\n private static _logLevel = LogLevel.INFO;\r\n\r\n private static _isDebug = true;\r\n private static _save_logs = true;\r\n\r\n\r\n public static Info(message, ...params) {\r\n if (this._isDebug === false) {\r\n return;\r\n }\r\n\r\n if (this._logLevel > LogLevel.INFO) {\r\n return;\r\n }\r\n\r\n console.log(message, params);\r\n\r\n\r\n if (this._save_logs) {\r\n const current_log = {\r\n message: message,\r\n params: params,\r\n status: LogLevel.INFO,\r\n time: new Date()\r\n };\r\n this.saveLogToLocal(current_log);\r\n }\r\n }\r\n\r\n public static Warning(message, ...params) {\r\n if (this._isDebug === false) {\r\n return;\r\n }\r\n\r\n if (this._logLevel > LogLevel.WARNING) {\r\n return;\r\n }\r\n\r\n console.log(message, params);\r\n\r\n\r\n if (this._save_logs) {\r\n\r\n const current_log = {\r\n message: message,\r\n params: params,\r\n status: LogLevel.WARNING,\r\n time: new Date()\r\n };\r\n this.saveLogToLocal(current_log);\r\n\r\n }\r\n }\r\n\r\n public static Error(message, ...params) {\r\n if (this._isDebug === false) {\r\n return;\r\n }\r\n\r\n if (this._logLevel > LogLevel.ERROR) {\r\n return;\r\n }\r\n\r\n console.error(message, params);\r\n\r\n if (this._save_logs) {\r\n const current_log = {\r\n message: message,\r\n params: params,\r\n status: LogLevel.ERROR,\r\n time: new Date()\r\n };\r\n this.saveLogToLocal(current_log);\r\n }\r\n }\r\n\r\n public static Exception(message, ...params) {\r\n if (this._isDebug === false) {\r\n return;\r\n }\r\n\r\n console.error(message, params);\r\n\r\n if (this._save_logs) {\r\n\r\n const current_log = {\r\n message: message,\r\n params: params,\r\n status: LogLevel.EXCEPTION,\r\n time: new Date()\r\n };\r\n this.saveLogToLocal(current_log);\r\n\r\n }\r\n }\r\n\r\n public static setSaveLogs(action: boolean) {\r\n this._save_logs = action;\r\n }\r\n\r\n public static getSaveLogs() {\r\n return this._save_logs;\r\n }\r\n\r\n private static saveLogToLocal(current_log: { time: Date; message: any; params: any[]; status: LogLevel }) {\r\n let logs = [];\r\n const older_logs = localStorage.getItem('logs');\r\n if (typeof older_logs === 'string') {\r\n logs = JSON.parse(older_logs);\r\n } else {\r\n logs = [];\r\n }\r\n // @ts-ignore\r\n logs.push(current_log);\r\n\r\n // Re-serialize the array back into a string and store it in localStorage\r\n localStorage.setItem('logs', JSON.stringify(logs, (key: string, value: any) => {\r\n if(value instanceof Uint8Array){\r\n return Utility.ByteArrayToHexString(value);\r\n }\r\n\r\n return value;\r\n }));\r\n }\r\n\r\n}\r\n","export const EIP1559_DEVICE_MINIMUM_VERSION_SUPPORT = '1.10.4';\r\n","import { MessageTypes, TypedMessage, HashTypedDataModel } from \"../models/EthereumTypedDataModel\";\r\n\r\n// eslint-disable-next-line import/no-unresolved\r\nconst sigUtil = require('@metamask/eth-sig-util');\r\n\r\n/**\r\n * Calculates the domain_separator_hash and message_hash from an EIP-712 Typed Data object.\r\n * @param data The EIP-712 Typed Data object\r\n */\r\nexport function HashTypedData(data: TypedMessage, isMetamaskV4Compatible: boolean): HashTypedDataModel {\r\n if(isMetamaskV4Compatible == false) {\r\n throw new Error(\"Only version 4 of typed data signing is supported\");\r\n }\r\n\r\n const version = sigUtil.SignTypedDataVersion.V4;\r\n const { types, primaryType, domain, message } = sigUtil.TypedDataUtils.sanitizeData(data);\r\n\r\n // Compute domain Separator hash\r\n const domainSeparatorHash = sigUtil.TypedDataUtils.hashStruct(\r\n 'EIP712Domain',\r\n _sanitizeData(domain),\r\n types,\r\n version,\r\n ).toString('hex');\r\n\r\n let messageHash = null;\r\n\r\n // Compute message hash\r\n if (primaryType !== 'EIP712Domain') {\r\n messageHash = sigUtil.TypedDataUtils.hashStruct(\r\n primaryType,\r\n _sanitizeData(message),\r\n types,\r\n version,\r\n ).toString('hex');\r\n }\r\n\r\n return {\r\n domain_separator_hash: domainSeparatorHash,\r\n message_hash: messageHash,\r\n }\r\n}\r\n\r\nfunction _sanitizeData(data) {\r\n switch (Object.prototype.toString.call(data)) {\r\n case '[object Object]': {\r\n const entries = Object.keys(data).map(k => [k, _sanitizeData(data[k])]);\r\n return Object.fromEntries(entries);\r\n }\r\n\r\n case '[object Array]':\r\n return data.map(v => _sanitizeData(v));\r\n\r\n case '[object BigInt]':\r\n return data.toString();\r\n\r\n default:\r\n return data;\r\n }\r\n}\r\n\r\n","/**\r\n* Get network by chainId\r\n* @param chainId Chain ID\r\n*/\r\nexport function GetNetworkByChainId(chainId: number): string {\r\n switch(chainId) {\r\n case 1:\r\n return 'eth'; // Ethereum Mainnet\r\n case 2:\r\n return 'exp'; // Expanse Network\t\r\n case 3:\r\n return 'ropsten' // Ethereum Testnet Ropsten\r\n case 4:\r\n return 'trin'; // Ethereum Testnet Rinkeby\r\n case 5:\r\n return 'goerli'; // Ethereum Testnet Görli\r\n case 8:\r\n return 'ubq'; // Ubiq Network Mainnet\r\n case 30:\r\n return 'rsk'; // RSK\r\n case 31:\r\n return 'trsk'; // RSK Testnet\r\n case 42:\r\n return 'kovan'; // Ethereum Testnet Kovan\r\n case 56:\r\n return 'bsc'; // Binance Smart Chain\r\n case 61:\r\n return 'etc'; // Ethereum Classic Mainnet\r\n case 64:\r\n return 'ella'; // Ellaism\r\n case 31102:\r\n return 'ESN'; // Ethersocial Network\r\n default:\r\n return chainId.toString();\r\n }\r\n}\r\n\r\n/**\r\n * Return the full name of Network, usually this uses in UI\r\n * @param chainId Chain ID\r\n */\r\nexport function GetNetworkFullNameByChainId(chainId: number){\r\n switch(chainId) {\r\n case 1:\r\n return 'Ethereum'; // Ethereum Mainnet\r\n case 2:\r\n return 'Expanse'; // Expanse Network\t\r\n case 3:\r\n return 'Ethereum Testnet Ropsten'; // Ethereum Testnet Ropsten\r\n case 4:\r\n return 'Ethereum Testnet Rinkeby'; // Ethereum Testnet Rinkeby\r\n case 5:\r\n return 'Ethereum Testnet Gorli'; // Ethereum Testnet Görli\r\n case 8:\r\n return 'Ubiq'; // Ubiq Network Mainnet\r\n case 30:\r\n return 'RSK'; // RSK\r\n case 31:\r\n return 'RSK Testnet'; // RSK Testnet\r\n case 42:\r\n return 'Ethereum Testnet Kovan'; // Ethereum Testnet Kovan\r\n case 56:\r\n return 'Binance Smart Chain'; // Binance Smart Chain\r\n case 61:\r\n return 'Ethereum Classic'; // Ethereum Classic Mainnet\r\n case 64:\r\n return 'Ellaism'; // Ellaism\r\n case 31102:\r\n return 'Ethersocial'; // Ethersocial Network\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nexport function GetSlip44ByChainId(chainId: number): number {\r\n switch(chainId) {\r\n case 1:\r\n return 60; // Ethereum Mainnet\r\n case 2:\r\n return 40; // Expanse Network\t\r\n case 3:\r\n return 1; // Ethereum Testnet Ropsten\r\n case 4:\r\n return 1; // Ethereum Testnet Rinkeby\r\n case 5:\r\n return 1; // Ethereum Testnet Görli\r\n case 8:\r\n return 108; // Ubiq Network Mainnet\r\n case 30:\r\n return 137; // RSK\r\n case 31:\r\n return 1; // RSK Testnet\r\n case 42:\r\n return 1; // Ethereum Testnet Kovan\r\n case 56:\r\n return 60; // Binance Smart Chain\r\n case 61:\r\n return 61; // Ethereum Classic Mainnet\r\n case 64:\r\n return 163; // Ellaism\r\n case 31102:\r\n return 31102; // Ethersocial Network\r\n default:\r\n throw new Error(\"GetSlip44ByChainId->Undefined chain id\");\r\n }\r\n}","import { BigNumber } from '@ethersproject/bignumber';\r\nimport { FeeData, JsonRpcProvider, TransactionRequest } from '@ethersproject/providers';\r\nimport Providers from '../../data/NetworkProviders.json'\r\n\r\nexport async function GetGasParams(chainId: number): Promise;\r\nexport async function GetGasParams(url: string): Promise;\r\n\r\nexport async function GetGasParams(param: any): Promise {\r\n const provider = await SetupProvider(param)\r\n return provider.getFeeData();\r\n}\r\n\r\n\r\nexport async function EstimateGasLimit(chainId: number, transaction: TransactionRequest): Promise\r\nexport async function EstimateGasLimit(url: string, transaction: TransactionRequest): Promise\r\n\r\nexport async function EstimateGasLimit(param: any, transaction: TransactionRequest): Promise {\r\n const provider = await SetupProvider(param);\r\n return provider.estimateGas(transaction);\r\n}\r\n\r\n///////////////////\r\n// PRIVATE METHODS\r\n///////////////////\r\n\r\n/**\r\n * \r\n * @param {number} chainId\r\n * @param {string} url\r\n * @returns {Promise}\r\n * \r\n * connect with provider using a chain id (should exist in NetworkProviders.json)\r\n * or using a custom rpc url.\r\n * This method will try to connect to the provider for 5 seconds.\r\n * if it takes longer than 5 seconds promise will be rejected.\r\n */\r\nasync function SetupProvider(chainId: number): Promise;\r\nasync function SetupProvider(url: string): Promise;\r\n\r\nasync function SetupProvider(param: any) {\r\n return new Promise(async (resolve, reject) => {\r\n let url = '';\r\n if (typeof param === 'number') {\r\n const tempUrl = GetNetworkUrl(param);\r\n if (tempUrl === undefined) {\r\n reject(\"Couldn't find any provider with specified chain id.\");\r\n } else {\r\n url = tempUrl;\r\n }\r\n } else url = param;\r\n const jsonRpcProvider = new JsonRpcProvider(url);\r\n const timer = setTimeout(() => {\r\n reject('Connection timeout');\r\n }, 5000);\r\n const network = await jsonRpcProvider.ready;\r\n clearTimeout(timer);\r\n if (network.name) resolve(jsonRpcProvider);\r\n reject('Unknown error')\r\n })\r\n}\r\n\r\n//TODO => Try other rpc url to connect if the current one fails.\r\nfunction GetNetworkUrl(chainId: number): string | undefined {\r\n const network = Providers.find(item => item.chainId == chainId);\r\n return network?.url[0];\r\n}","/* @flow */\r\n\r\nvar BigNumber = require('bignumber.js');\r\n\r\n\r\ntype Param = {\r\n name: string,\r\n type?: 'string' | 'number' | 'array' | 'buffer' | 'boolean' | 'amount' | 'object',\r\n obligatory?: boolean,\r\n allowEmpty?: boolean,\r\n}\r\n\r\nexport const validateParams = (values: Object, fields: Array): void => {\r\n fields.forEach(field => {\r\n if (Object.prototype.hasOwnProperty.call(values, field.name)) {\r\n const value = values[field.name];\r\n if (field.type) {\r\n if (field.type === 'array') {\r\n if (!Array.isArray(value)) {\r\n throw new Error(`Parameter \"${field.name}\" has invalid type. \"${field.type}\" expected.`);\r\n } else if (!field.allowEmpty && value.length < 1) {\r\n throw new Error(`Parameter \"${field.name}\" is empty.`);\r\n }\r\n } else if (field.type === 'amount') {\r\n if (typeof value !== 'string') {\r\n throw new Error(`Parameter \"${field.name}\" has invalid type. \"string\" expected.`);\r\n }\r\n try {\r\n const bn = new BigNumber(value);\r\n if (bn.toFixed(0) !== value) {\r\n throw new Error('');\r\n }\r\n } catch (error) {\r\n throw new Error(`Parameter \"${field.name}\" has invalid value \"${value}\". Integer representation expected.`);\r\n }\r\n } else if (field.type === 'buffer') {\r\n if (typeof value === 'undefined' || (typeof value.constructor.isBuffer === 'function' && value.constructor.isBuffer(value))) {\r\n throw new Error(`Parameter \"${field.name}\" has invalid type. \"buffer\" expected.`);\r\n }\r\n } else if (typeof value !== field.type) {\r\n throw new Error(`Parameter \"${field.name}\" has invalid type. \"${field.type}\" expected.`);\r\n }\r\n }\r\n } else if (field.obligatory) {\r\n throw new Error(`Parameter \"${field.name}\" is missing.`);\r\n }\r\n });\r\n};\r\n\r\n\r\nexport const fixPath = (utxo: any): any => {\r\n // make sure bip32 indices are unsigned\r\n if (utxo.address_n && Array.isArray(utxo.address_n)) {\r\n utxo.address_n = utxo.address_n.map((i: number) => i >>> 0);\r\n }\r\n return utxo;\r\n};\r\n\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\n/* @flow */\r\n'use strict';\r\n\r\nimport { \r\n EnumOutputScriptType, \r\n AddressModel, \r\n EnumInputScriptType \r\n} from '../models/Prokey';\r\n\r\nimport { CoinBaseType } from \"../coins/CoinInfo\";\r\n\r\nimport {\r\n GeneralCoinInfoModel,\r\n BitcoinBaseCoinInfoModel,\r\n EthereumBaseCoinInfoModel,\r\n RippleCoinInfoModel,\r\n} from '../models/CoinInfoModel'\r\n\r\n\r\nexport const HD_HARDENED = 0x80000000;\r\nexport const toHardened = (n: number): number => (n | HD_HARDENED) >>> 0;\r\nexport const fromHardened = (n: number): number => (n & ~HD_HARDENED) >>> 0;\r\n\r\nexport const invalidParameter = (msg: string): void => {\r\n\r\n};\r\n\r\nconst PATH_NOT_VALID = invalidParameter('Not a valid path.');\r\nconst PATH_NEGATIVE_VALUES = invalidParameter('Path cannot contain negative values.');\r\n\r\nexport const getHDPath = (path: string): Array => {\r\n const parts: Array = path.toLowerCase().split('/');\r\n if (parts[0] !== 'm') {\r\n throw PATH_NOT_VALID;\r\n }\r\n\r\n return parts.filter((p: string) => p !== 'm' && p !== '')\r\n .map((p: string) => {\r\n let hardened = false;\r\n if (p.substr(p.length - 1) === \"'\") {\r\n hardened = true;\r\n p = p.substr(0, p.length - 1);\r\n }\r\n let n: number = parseInt(p, 10);\r\n if (isNaN(n)) {\r\n throw PATH_NOT_VALID;\r\n } else if (n < 0) {\r\n throw PATH_NEGATIVE_VALUES;\r\n }\r\n if (hardened) { // hardened index\r\n n = toHardened(n);\r\n }\r\n return n;\r\n });\r\n};\r\n\r\nexport function IsSegwitPath(path: Array | any): boolean {\r\n return Array.isArray(path) && path[0] === toHardened(49);\r\n};\r\n\r\nexport function IsChangePath(path: Array): boolean {\r\n if(path.length < 5)\r\n return false;\r\n\r\n if(path[3] == 0)\r\n return false;\r\n \r\n return true;\r\n}\r\n\r\nexport const validatePath = (path: string | Array, length: number = 0, base: boolean = false): Array => {\r\n let valid: Array = [];\r\n if (typeof path === 'string') {\r\n valid = getHDPath(path);\r\n } else if (Array.isArray(path)) {\r\n valid = path.map((p: any) => {\r\n const n: number = parseInt(p, 10);\r\n if (isNaN(n)) {\r\n throw PATH_NOT_VALID;\r\n } else if (n < 0) {\r\n throw PATH_NEGATIVE_VALUES;\r\n }\r\n return n;\r\n });\r\n }\r\n\r\n if (!valid) {\r\n throw PATH_NOT_VALID;\r\n }\r\n\r\n if (length > 0 && valid.length < length) {\r\n throw PATH_NOT_VALID;\r\n }\r\n return base ? valid.splice(0, 3) : valid;\r\n};\r\n\r\nexport function getSerializedPath(path: Array): string {\r\n return path.map((i) => {\r\n const s = (i & ~HD_HARDENED).toString();\r\n if (i & HD_HARDENED) {\r\n return s + \"'\";\r\n } else {\r\n return s;\r\n }\r\n }).join('/');\r\n}\r\n\r\nexport const getPathFromIndex = (bip44purpose: number, bip44cointype: number, index: number): Array => {\r\n return [\r\n toHardened(bip44purpose),\r\n toHardened(bip44cointype),\r\n toHardened(index),\r\n ];\r\n};\r\n\r\nexport function getIndexFromPath(path: Array): number {\r\n if (path.length < 3) {\r\n throw invalidParameter(`getIndexFromPath: invalid path length ${path.toString()}`);\r\n }\r\n return fromHardened(path[2]);\r\n}\r\n\r\n// export const getAccountLabel = (path: Array, coinInfo: CoinInfo): string => {\r\n// const coinLabel: string = coinInfo.label;\r\n// const p1: number = fromHardened(path[0]);\r\n// const account: number = fromHardened(path[2]);\r\n// const realAccountId: number = account + 1;\r\n// const prefix = 'Export info of';\r\n// let accountType = '';\r\n\r\n// if (p1 === 48) {\r\n// accountType = `${coinLabel} multisig`;\r\n// } else if (p1 === 44 && coinInfo.segwit) {\r\n// accountType = `${coinLabel} legacy`;\r\n// } else {\r\n// accountType = coinLabel;\r\n// }\r\n// return `${prefix} ${accountType} account #${realAccountId}`;\r\n// };\r\n\r\n\r\n// export const getLabel = (label: string, coinInfo: CoinInfo): string => {\r\n// if (coinInfo) {\r\n// return label.replace('#NETWORK', coinInfo.label);\r\n// }\r\n// return label.replace('#NETWORK', '');\r\n// };\r\n\r\nexport function GetScriptType(path?: Array): EnumInputScriptType {\r\n if (!Array.isArray(path) || path.length < 1){ \r\n return EnumInputScriptType.SPENDADDRESS;\r\n }\r\n\r\n const p1 = fromHardened(path[0]);\r\n switch (p1) {\r\n case 48:\r\n return EnumInputScriptType.SPENDMULTISIG;\r\n case 49:\r\n return EnumInputScriptType.SPENDP2SHWITNESS;\r\n case 84:\r\n return EnumInputScriptType.SPENDWITNESS;\r\n default:\r\n return EnumInputScriptType.SPENDADDRESS;\r\n }\r\n};\r\n\r\nexport function GetOutputScriptType(path?: Array): EnumOutputScriptType {\r\n if (!Array.isArray(path) || path.length < 1) \r\n return EnumOutputScriptType.PAYTOADDRESS;\r\n const p = fromHardened(path[0]);\r\n switch (p) {\r\n case 48:\r\n return EnumOutputScriptType.PAYTOMULTISIG;\r\n case 49:\r\n return EnumOutputScriptType.PAYTOP2SHWITNESS;\r\n case 84:\r\n return EnumOutputScriptType.PAYTOWITNESS;\r\n default:\r\n return EnumOutputScriptType.PAYTOADDRESS;\r\n }\r\n};\r\n\r\n/**\r\n * Will return BIP Path based on the coin type and parameters. The number of parameters can be vary and depends on the coin type.\r\n * @param coinType Should be one of the CoinBaseType\r\n * @param account Account Number, This is mandatory parameters for all coins except Ethereum in case you want to get PublicKey path\r\n * @param coinInfo This parameter is mandatory for Bitcoin-based, Ethereum-Based and Ripple\r\n * @param isChange Only needed for Bitcoin-Based\r\n * @param startIndex Only needed for Bitcoin-Based\r\n * @returns AddressModel\r\n */\r\nexport function GetBipPath(coinType: CoinBaseType, account?: number, coinInfo?: GeneralCoinInfoModel, isChange?: boolean, startIndex?: number ): AddressModel {\r\n // Each coin uses BIP44 path schema, For Bitcoin like coins which have UTXO, all 5 parts should be\r\n // available. But for the account-based coins the path could be different and unfortunately\r\n // there is no specific standards that all the wallet follow and there are many exceptions here.\r\n\r\n // BIP44 path is:\r\n // For UTXO-based coins (like Bitcoin, Bitcoin cash, Litecoin and etc) we use:\r\n // m / purpose'(44 or 49) / coin_type' / account' / change / address_index\r\n\r\n // For account-based coins (like Stellar, NEM and etc) we use:\r\n // Stellar's SEP-0005\r\n // m / 44' / coin_type' / account'\r\n\r\n // EXCEPTIONS: \r\n // There are some exception here that we need to follow for compatibility reasons with other wallets/tools.\r\n // Ethereum: To be compatible with tools like MEW and Metamask we use:\r\n // m / 44' / coin_type' / 0' / 0 / account'\r\n // Ripple: To be compatible with other Hardware wallets, we use:\r\n // m / 44' / 144' / account' / 0 / 0\r\n\r\n switch(coinType){\r\n // m / purpose' / coin_type' / account' / change / address_index\r\n case CoinBaseType.BitcoinBase:\r\n {\r\n if(coinInfo == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Bitcoin-based, coinInfo can not be null\");\r\n }\r\n\r\n //! For getting publicKey, both isChange and startIndex should be null\r\n if(isChange == null && startIndex != null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Bitcoin-based, isChange can not be null\");\r\n }\r\n\r\n if(startIndex == null && isChange != null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Bitcoin-based, startIndex can not be null\")\r\n }\r\n\r\n if(account == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Bitcoin-based, account can not be null\")\r\n }\r\n\r\n let ci = coinInfo as BitcoinBaseCoinInfoModel;\r\n let path = {\r\n address: \"\",\r\n path: [\r\n HD_HARDENED + ((ci.segwit) ? 49 : 44), // purpose'\r\n HD_HARDENED + ci.slip44, // coin_type'\r\n HD_HARDENED + account, // account'\r\n ]\r\n }\r\n\r\n // For getting Public Key isChange should be null\r\n if(isChange != null){\r\n path.path.push((isChange == true) ? 1 : 0);\r\n }\r\n\r\n // For getting Public Key startIndex should be null\r\n if(startIndex != null) {\r\n path.path.push(startIndex);\r\n }\r\n \r\n return path;\r\n }\r\n // m / purpose' / coin_type' / 0' / 0 / account\r\n case CoinBaseType.EthereumBase:\r\n {\r\n if(coinInfo == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Ethereum, coinInfo can not be null\")\r\n }\r\n\r\n let ci = coinInfo as EthereumBaseCoinInfoModel;\r\n let path = {\r\n address: \"\",\r\n path: [\r\n HD_HARDENED + 44, // purpose'\r\n HD_HARDENED + ci.slip44, // coin_type'\r\n HD_HARDENED, // 0' as account\r\n 0 // No change\r\n ]\r\n }\r\n\r\n // For getting Public Key the account should be null\r\n if(account != null) {\r\n path.path.push(account);\r\n }\r\n \r\n return path;\r\n }\r\n // m / purpose' / 0' / 0' / 0 / account\r\n case CoinBaseType.OMNI:\r\n {\r\n if(account == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Omni, account can not be null\")\r\n }\r\n\r\n let path = {\r\n address: \"\",\r\n path: [\r\n HD_HARDENED + 49, // Segwit\r\n HD_HARDENED, // Bitcoin coin_type is 0\r\n HD_HARDENED, // 0' for account\r\n 0, // no change\r\n account\r\n ]\r\n }\r\n \r\n return path;\r\n }\r\n // m / purpose' / coin_type' / account' / 0 / 0\r\n case CoinBaseType.Ripple:\r\n {\r\n if(account == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Ripple, account can not be null\")\r\n }\r\n\r\n if(coinInfo == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Ripple, coinInfo can not be null\")\r\n }\r\n\r\n const ci = coinInfo as RippleCoinInfoModel;\r\n\r\n let path = {\r\n address: \"\",\r\n path: [\r\n HD_HARDENED + 44, // BIP44\r\n HD_HARDENED + ci.slip44, // Ripple mainnet coin_type is 144 and testnet is 1\r\n HD_HARDENED + account, // account\r\n 0,\r\n 0\r\n ]\r\n }\r\n \r\n return path;\r\n }\r\n // m / purpose' / coin_type' / 0' / 0 / account\r\n case CoinBaseType.ERC20:\r\n {\r\n if(account == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For ERC20, account can not be null\")\r\n }\r\n\r\n if(coinInfo == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For ERC20, coinInfo can not be null\")\r\n }\r\n\r\n let ci = coinInfo as EthereumBaseCoinInfoModel;\r\n\r\n let path = {\r\n address: \"\",\r\n path: [\r\n HD_HARDENED + 44, // purpose'\r\n HD_HARDENED + ci.slip44, // coin_type' \r\n HD_HARDENED, // 0' for account\r\n 0, // No change\r\n account // account\r\n ]\r\n }\r\n \r\n return path;\r\n }\r\n // m / purpose' / coin_type' / account'\r\n case CoinBaseType.NEM:\r\n {\r\n if(account == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For NEM, account can not be null\")\r\n }\r\n\r\n let path = {\r\n address: \"\",\r\n path: [\r\n HD_HARDENED + 44, // BIP44\r\n HD_HARDENED + 43, // coin_type' \r\n HD_HARDENED + account, // account'\r\n ]\r\n }\r\n \r\n return path; \r\n }\r\n // m / purpose' / coin_type' / account'\r\n case CoinBaseType.Stellar:\r\n {\r\n if(account == null) {\r\n throw new Error(\"pathUtils::GetBipPath->For Stellar, account can not be null\")\r\n }\r\n\r\n let path = {\r\n address: \"\",\r\n path: [\r\n HD_HARDENED + 44, // BIP44\r\n HD_HARDENED + 148, // coin_type'\r\n HD_HARDENED + account, // account'\r\n ]\r\n }\r\n \r\n return path; \r\n }\r\n default:\r\n {\r\n throw new Error(\"pathUtil::GetBipPath->Undefined coin type\") \r\n }\r\n }\r\n}\r\n","import * as assert from 'assert';\r\nimport { Buffer } from 'buffer';\r\n\r\nexport class RlpEncoding {\r\n public encode(input: Buffer | string | number | Array) {\r\n if (input instanceof Array) {\r\n const output:any[] = []\r\n for (let i = 0; i < input.length; i++) {\r\n output.push(this.encode(input[i]))\r\n }\r\n const buf = Buffer.concat(output)\r\n return Buffer.concat([this.encodeLength(buf.length, 192), buf])\r\n } else {\r\n input = this.toBuffer(input);\r\n if (input.length === 1 && input[0] < 128) {\r\n return input\r\n } else {\r\n return Buffer.concat([this.encodeLength(input.length, 128), input])\r\n }\r\n }\r\n }\r\n\r\n private safeParseInt(v, base) {\r\n if (v.slice(0, 2) === '00') {\r\n throw (new Error('invalid RLP: extra zeros'))\r\n }\r\n return parseInt(v, base)\r\n }\r\n\r\n private encodeLength(len, offset) {\r\n if (len < 56) {\r\n return Buffer.from([len + offset])\r\n } else {\r\n const hexLength = this.intToHex(len)\r\n const lLength = hexLength.length / 2\r\n const firstByte = this.intToHex(offset + 55 + lLength)\r\n return Buffer.from(firstByte + hexLength, 'hex')\r\n }\r\n }\r\n\r\n /**\r\n * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/RLP}\r\n * @param data - will be converted to buffer\r\n * @returns - returns decode Array of Buffers containg the original message\r\n **/\r\n public decode(input: Buffer | string, stream?: boolean): Buffer | Array {\r\n if (!input || input.length === 0) {\r\n return Buffer.from([]);\r\n }\r\n\r\n input = this.toBuffer(input);\r\n const decoded = this._decode(input);\r\n\r\n if (stream) {\r\n return decoded as any;\r\n }\r\n\r\n assert.strictEqual(decoded.remainder.length, 0, 'invalid remainder');\r\n return decoded.data;\r\n }\r\n\r\n public getLength(input: string | Buffer): number | Buffer {\r\n if (!input || input.length === 0) {\r\n return Buffer.from([])\r\n }\r\n\r\n input = this.toBuffer(input)\r\n const firstByte = input[0]\r\n if (firstByte <= 0x7f) {\r\n return input.length\r\n } else if (firstByte <= 0xb7) {\r\n return firstByte - 0x7f\r\n } else if (firstByte <= 0xbf) {\r\n return firstByte - 0xb6\r\n } else if (firstByte <= 0xf7) {\r\n // a list between 0-55 bytes long\r\n return firstByte - 0xbf\r\n } else {\r\n // a list over 55 bytes long\r\n const llength = firstByte - 0xf6\r\n const length = this.safeParseInt(input.slice(1, llength).toString('hex'), 16)\r\n return llength + length\r\n }\r\n }\r\n\r\n private _decode(input: Buffer) {\r\n let length, llength, data, innerRemainder, d;\r\n const decoded:any[] = []\r\n const firstByte = input[0]\r\n\r\n if (firstByte <= 0x7f) {\r\n // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.\r\n return {\r\n data: input.slice(0, 1),\r\n remainder: input.slice(1)\r\n }\r\n } else if (firstByte <= 0xb7) {\r\n // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string\r\n // The range of the first byte is [0x80, 0xb7]\r\n length = firstByte - 0x7f\r\n\r\n // set 0x80 null to 0\r\n if (firstByte === 0x80) {\r\n data = Buffer.from([])\r\n } else {\r\n data = input.slice(1, length)\r\n }\r\n\r\n if (length === 2 && data[0] < 0x80) {\r\n throw new Error('invalid rlp encoding: byte must be less 0x80')\r\n }\r\n\r\n return {\r\n data: data,\r\n remainder: input.slice(length)\r\n }\r\n } else if (firstByte <= 0xbf) {\r\n llength = firstByte - 0xb6\r\n length = this.safeParseInt(input.slice(1, llength).toString('hex'), 16)\r\n data = input.slice(llength, length + llength)\r\n if (data.length < length) {\r\n throw (new Error('invalid RLP'))\r\n }\r\n\r\n return {\r\n data: data,\r\n remainder: input.slice(length + llength)\r\n }\r\n } else if (firstByte <= 0xf7) {\r\n // a list between 0-55 bytes long\r\n length = firstByte - 0xbf\r\n innerRemainder = input.slice(1, length)\r\n while (innerRemainder.length) {\r\n d = this._decode(innerRemainder)\r\n decoded.push(d.data)\r\n innerRemainder = d.remainder\r\n }\r\n\r\n return {\r\n data: decoded,\r\n remainder: input.slice(length)\r\n }\r\n } else {\r\n // a list over 55 bytes long\r\n llength = firstByte - 0xf6\r\n length = this.safeParseInt(input.slice(1, llength).toString('hex'), 16)\r\n const totalLength = llength + length\r\n if (totalLength > input.length) {\r\n throw new Error('invalid rlp: total length is larger than the data')\r\n }\r\n\r\n innerRemainder = input.slice(llength, totalLength)\r\n if (innerRemainder.length === 0) {\r\n throw new Error('invalid rlp, List has a invalid length')\r\n }\r\n\r\n while (innerRemainder.length) {\r\n d = this._decode(innerRemainder)\r\n decoded.push(d.data)\r\n innerRemainder = d.remainder\r\n }\r\n return {\r\n data: decoded,\r\n remainder: input.slice(totalLength)\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * HELPERS : TO REMOVE\r\n */\r\n\r\n private isHexPrefixed(str): boolean {\r\n return str.slice(0, 2) === '0x'\r\n }\r\n\r\n // Removes 0x from a given String\r\n private stripHexPrefix(str: string): string {\r\n if (typeof str !== 'string') {\r\n return str\r\n }\r\n return this.isHexPrefixed(str) ? str.slice(2) : str\r\n }\r\n\r\n private intToHex(i: number): string {\r\n let hex = i.toString(16)\r\n if (hex.length % 2) {\r\n hex = '0' + hex\r\n }\r\n return hex\r\n }\r\n\r\n private padToEven(a: string): string {\r\n if (a.length % 2) a = '0' + a\r\n return a\r\n }\r\n\r\n private intToBuffer(i: number): Buffer {\r\n const hex = this.intToHex(i)\r\n return Buffer.from(hex, 'hex')\r\n }\r\n\r\n private toBuffer(v: any): Buffer {\r\n if (!Buffer.isBuffer(v)) {\r\n if (typeof v === 'string') {\r\n if (this.isHexPrefixed(v)) {\r\n v = Buffer.from(this.padToEven(this.stripHexPrefix(v)), 'hex')\r\n } else {\r\n v = Buffer.from(v)\r\n }\r\n } else if (typeof v === 'number') {\r\n if (!v) {\r\n v = Buffer.from([])\r\n } else {\r\n v = this.intToBuffer(v)\r\n }\r\n } else if (v === null || v === undefined) {\r\n v = Buffer.from([])\r\n } else if (v.toArray) {\r\n // converts a BN to a Buffer\r\n v = Buffer.from(v.toArray())\r\n } else {\r\n throw new Error('invalid type')\r\n }\r\n }\r\n return v\r\n }\r\n}\r\n","\r\n/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nexport function ReverseBuffer(buf: Buffer): Buffer {\r\n const copy = Buffer.alloc(buf.length);\r\n buf.copy(copy);\r\n [].reverse.call(copy);\r\n return copy;\r\n};\r\n\r\nexport function ReverseString(buf: string): string {\r\n return buf.split(\"\").reverse().join(\"\");\r\n};\r\n\r\nexport function ReverseByteArray(buf: Uint8Array): Uint8Array {\r\n let copy: Uint8Array = new Uint8Array(buf.length);\r\n for (let i = 0; i < buf.length; i++) {\r\n copy[buf.length - i - 1] = buf[i];\r\n }\r\n\r\n return buf;\r\n}\r\n\r\nexport function HexStringToByteArray(data: string): Uint8Array {\r\n var b = new Uint8Array(data.length / 2);\r\n var n = 0;\r\n while (data.length > 0) {\r\n b[n] = Number.parseInt(data.substring(0, 2), 16);\r\n n++;\r\n data = data.substring(2);\r\n }\r\n\r\n return b;\r\n}\r\n\r\nexport function HexStringToByteArrayNumber(data: string): Array {\r\n if (data.length % 2 == 1) {\r\n throw new Error(\"Hex string lenght should be even\");\r\n }\r\n\r\n let n = 0;\r\n var b: Array = new Array(10);\r\n while (data.length > 0) {\r\n b[n++] = Number.parseInt(data.substring(0, 2), 16);\r\n data = data.substring(2);\r\n }\r\n\r\n return b;\r\n}\r\n\r\nexport function HexStringToUTF8(hex: string): string {\r\n if (hex.startsWith(\"0x\")) {\r\n hex = hex.slice(2);\r\n }\r\n return decodeURIComponent(\r\n hex\r\n .match(/.{1,2}/g)\r\n .map(byte => `%${byte}`)\r\n .join(\"\")\r\n );\r\n}\r\n\r\nexport function ByteArrayToHexString(buf: any): string {\r\n return Array.from(buf, function (b: number) {\r\n return ('0' + (b & 0xFF).toString(16)).slice(-2);\r\n }).join('');\r\n}\r\n\r\nexport function DecimalStrigArrayToHexString(buf: string, seperator: string): string {\r\n const da = buf.split(seperator);\r\n let bArr = new Array();\r\n\r\n da.forEach(element => {\r\n bArr.push(Number.parseInt(element));\r\n });\r\n\r\n return ByteArrayToHexString(bArr);\r\n}\r\n\r\n\r\nexport function StringToUint8Array(inp: string): Uint8Array {\r\n // var string = btoa(unescape(encodeURIComponent(inp))),\r\n // charList = string.split(''),\r\n // uintArray = [];\r\n // for (var i = 0; i < charList.length; i++) {\r\n // uintArray.push(charList[i].charCodeAt(0));\r\n // }\r\n // return new Uint8Array(uintArray);\r\n\r\n const charlist = inp.split('');\r\n let uintarray = Array();\r\n for (var i = 0; i < charlist.length; i++) {\r\n uintarray.push(charlist[i].charCodeAt(0));\r\n }\r\n\r\n return new Uint8Array(uintarray);\r\n}\r\n\r\nexport function generateEntropy(len: number): Array {\r\n if (window.crypto) {\r\n var array = new Uint8Array(len);\r\n window.crypto.getRandomValues(array);\r\n return Array.from(array);\r\n } else {\r\n throw new Error('Browser does not support crypto random');\r\n }\r\n}\r\n\r\nfunction HasHexPrefix(str: string): boolean {\r\n return str.slice(0, 2).toLowerCase() === '0x';\r\n};\r\n\r\nexport function StripHexPrefix(str: string): string {\r\n return HasHexPrefix(str) ? str.slice(2) : str;\r\n};\r\n\r\nexport function StripLeadingZeroes(str: string) {\r\n while (/^00/.test(str)) {\r\n str = str.slice(2);\r\n }\r\n return str;\r\n}\r\n\r\nexport function SplitString(len: number, str?: string): [string, string] {\r\n if (str == null) {\r\n return ['', ''];\r\n }\r\n const first = str.slice(0, len);\r\n const second = str.slice(len);\r\n return [first, second];\r\n};\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n *\r\n * Hadi Robati, hadi@prokey.io\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { Device } from \"../device/Device\";\r\nimport {\r\n BitcoinBaseCoinInfoModel,\r\n EthereumBaseCoinInfoModel,\r\n Erc20BaseCoinInfoModel,\r\n OmniCoinInfoModel,\r\n RippleCoinInfoModel\r\n} from '../models/CoinInfoModel'\r\nimport { CoinBaseType, CoinInfo } from '../coins/CoinInfo'\r\nimport { ICoinCommands } from '../device/ICoinCommand'\r\nimport { BitcoinCommands } from '../device/BitcoinCommands';\r\nimport { EthereumCommands } from '../device/EthereumCommands';\r\nimport { NemCommands } from \"../device/NemCommands\";\r\nimport {\r\n AddressModel,\r\n EthereumAddress,\r\n LiskAddress,\r\n NEMAddress,\r\n RippleAddress,\r\n CardanoAddress,\r\n StellarAddress,\r\n PublicKey,\r\n CardanoPublicKey,\r\n BinancePublicKey,\r\n EosPublicKey,\r\n LiskPublicKey,\r\n TezosPublicKey,\r\n SignedTx,\r\n EthereumSignedTx,\r\n EosSignedTx,\r\n LiskSignedTx,\r\n TezosSignedTx,\r\n BinanceSignTx,\r\n CardanoSignedTx,\r\n NEMSignedTx,\r\n NEMSignTxMessage,\r\n Success\r\n} from \"../models/Prokey\";\r\n\r\nimport {\r\n MessageSignature,\r\n LiskMessageSignature\r\n} from '../models/Prokey';\r\n\r\nimport * as Util from '../utils/utils';\r\n\r\nimport { BitcoinTx } from '../models/BitcoinTx';\r\nimport { EthereumTx } from '../models/EthereumTx';\r\nimport { RippleCommands } from \"../device/RippleCommands\";\r\nimport { RippleSignedTx, RippleTransaction } from \"../models/Responses-V6\";\r\n\r\n/**\r\n * This is the base class for all implemented wallets\r\n */\r\nexport abstract class BaseWallet {\r\n private _coinInfo: BitcoinBaseCoinInfoModel | EthereumBaseCoinInfoModel | Erc20BaseCoinInfoModel | OmniCoinInfoModel | RippleCoinInfoModel;\r\n private _commands!: ICoinCommands;\r\n\r\n /**\r\n * base class constructor\r\n * @param _device The prokey device\r\n * @param _coinName Coin name, Check /data/ProkeyCoinsInfo.json\r\n * @param _coinType Coin type BitcoinBase | EthereumBase | ERC20 | NEM | OMNI | OTHERS\r\n */\r\n constructor(private _device: Device,\r\n coinName: string,\r\n coinType: CoinBaseType,\r\n chainOrPropertyNumber?: number,\r\n coinInfo?: BitcoinBaseCoinInfoModel | EthereumBaseCoinInfoModel | Erc20BaseCoinInfoModel | OmniCoinInfoModel | RippleCoinInfoModel) {\r\n if (_device == null)\r\n throw new Error('Device can not be null');\r\n\r\n if(coinInfo == null){\r\n // will threw an exception if coin can not be found\r\n this._coinInfo = CoinInfo.Get(coinName, coinType, chainOrPropertyNumber);\r\n } else {\r\n this._coinInfo = coinInfo;\r\n }\r\n\r\n // create the device commands\r\n switch (coinType) {\r\n case CoinBaseType.BitcoinBase:\r\n case CoinBaseType.OMNI:\r\n this._commands = new BitcoinCommands(coinName, coinType == CoinBaseType.OMNI);\r\n break;\r\n\r\n case CoinBaseType.EthereumBase:\r\n case CoinBaseType.ERC20:\r\n this._commands = new EthereumCommands();\r\n break;\r\n\r\n case CoinBaseType.Ripple:\r\n this._commands = new RippleCommands(coinName);\r\n break;\r\n\r\n case CoinBaseType.NEM:\r\n this._commands = new NemCommands(coinName);\r\n break;\r\n\r\n default:\r\n throw new Error(\"Unknown coin type\");\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Get CoinInfo\r\n */\r\n public GetCoinInfo(): BitcoinBaseCoinInfoModel | EthereumBaseCoinInfoModel | Erc20BaseCoinInfoModel | OmniCoinInfoModel | RippleCoinInfoModel {\r\n return this._coinInfo;\r\n }\r\n\r\n /**\r\n * Get Prokey device\r\n */\r\n public GetDevice(): Device {\r\n return this._device;\r\n }\r\n\r\n /**\r\n * Get device commands\r\n */\r\n public GetCommands(): ICoinCommands {\r\n return this._commands;\r\n }\r\n\r\n /**\r\n * Get Address\r\n * @param path Path to address\r\n * @param showOnProkey boolean, true means show address on prokey device\r\n */\r\n public async GetAddress(path: Array | string, showOnProkey?: boolean) {\r\n return await this._commands.GetAddress(this._device, path, showOnProkey) as T;\r\n }\r\n\r\n /**\r\n * Get list of addresses, usually used for account discovert\r\n * @param paths list of paths to get list of addresses\r\n */\r\n public async GetAddresses(paths: Array | string>) {\r\n return await this._commands.GetAddresses(this._device, paths) as Array\r\n }\r\n\r\n /**\r\n * Get Public key\r\n * @param path BIP32 path\r\n * @param showOnProkey boolean, true means show public on prokey device\r\n */\r\n public async GetPublicKey(path: string | Array, showOnProkey?: boolean) {\r\n return await this._commands.GetPublicKey(this._device, path, showOnProkey) as T;\r\n }\r\n\r\n /**\r\n * Sign Transaction\r\n * @param tx transaction to be signed by device\r\n */\r\n public async SignTransaction\r\n (tx: BitcoinTx | EthereumTx | RippleTransaction | NEMSignTxMessage): Promise\r\n {\r\n return await this._commands.SignTransaction(this._device, tx) as T;\r\n }\r\n\r\n /**\r\n * Sign Message\r\n * @param path BIP32 Path to sign the message\r\n * @param message Message to be signed\r\n * @param coinName Optional, Only for Bitcoin based coins\r\n */\r\n public async SignMessage(path: Array, message: string, coinName?: string): Promise {\r\n const messageBytes = Util.StringToUint8Array(message)\r\n return await this._commands.SignMessage(this._device, path, messageBytes, coinName) as T;\r\n }\r\n\r\n /**\r\n * Verify message\r\n * @param address Address\r\n * @param message Signed message\r\n * @param signature Signature\r\n * @param coinName Optional, Only for Bitcoin based coins\r\n * @returns\r\n */\r\n public async VerifyMessage(address: string, message: string, signature: string, coinName?: string): Promise {\r\n const messageBytes = Util.StringToUint8Array(message);\r\n const signBytes = Util.HexStringToByteArray(signature);\r\n return await this._commands.VerifyMessage(this._device, address, messageBytes, signBytes, coinName);\r\n }\r\n\r\n /**\r\n * Address validator\r\n * @param address address to be checked\r\n */\r\n public abstract IsAddressValid(address: string): boolean;\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport * as WalletModel from '../models/BitcoinWalletModel';\r\nimport * as GenericWalletModel from '../models/GenericWalletModel'\r\nimport { CoinBaseType } from '../coins/CoinInfo';\r\nimport { BitcoinBaseCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { Device } from '../device/Device'\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport { BitcoinOutputModel, BitcoinTx } from '../models/BitcoinTx';\r\nimport { BitcoinFeeSelectionModel } from '../models/FeeSelectionModel';\r\nimport {\r\n RefTransaction,\r\n TransactionInput,\r\n TransactionOutput,\r\n EnumOutputScriptType,\r\n AddressModel,\r\n PublicKey,\r\n} from '../models/Prokey';\r\nimport { BaseWallet } from './BaseWallet';\r\nimport { MyConsole } from '../utils/console'\r\nimport { BlockchainServerModel, BlockchainProviders } from '../blockchain/BlockchainProviders';\r\nimport { BitcoinBlockchain } from '../blockchain/BitcoinBlockchain';\r\nvar WAValidator = require('multicoin-address-validator');\r\n\r\n/**\r\n * If you wish to discover and use the bitcoin wallet, you need to use this class. \r\n * This class can be used for all bitcoin based coins.\r\n */\r\nexport class BitcoinWallet extends BaseWallet {\r\n private _bitcoinWallet!: WalletModel.BitcoinWalletModel \r\n private _bitcoinBlockchain: BitcoinBlockchain;\r\n private _servers: BlockchainServerModel[];\r\n\r\n\r\n\r\n // ----------------- Segwit TX -----------------------\r\n // Input\r\n // HASH(32) + Index(4) + ScriptLen(1) + Script (~23) + Seq.(4) + Witness(~74) + PK(1+33)\r\n _TX_DEFAULT_INPUT_SIZE = 172;\r\n\r\n // Output\r\n // Value(8) + ScriptLen(1) + Script(~23)\r\n _TX_DEFAULT_OUTPUT_SIZE = 32;\r\n\r\n // TX Details\r\n // Version(4) + Marker(1) + Flag(1) + InputCout(usually 1B) + OutputCount(usually 1B) + LockTime(4) \r\n _TX_DEFAULT_OVERHEAD_SIZE = 12;\r\n\r\n /**\r\n * class constructor\r\n * @param device Prokey device instance\r\n * @param coinName Coin name, Check /data/ProkeyCoinsInfo.json\r\n */\r\n constructor(device: Device, coinName: string) {\r\n super(device, coinName, CoinBaseType.BitcoinBase);\r\n\r\n this._servers = BlockchainProviders.Get(super.GetCoinInfo());\r\n this._bitcoinBlockchain = new BitcoinBlockchain(this._servers);\r\n }\r\n\r\n /**\r\n * Start searching blockchain to discovery(find) the wallet\r\n * @param accountFindCallBack is an optional callback function, this function will be called when an account discovered\r\n * @param allAccounts true means discover all account, false means discover only the first account\r\n * @returns BitcoinWallet with all accounts \r\n */\r\n public async StartDiscovery(accountFindCallBack?: (accountInfo: WalletModel.BitcoinAccountInfo) => void, allAccounts = true): Promise{\r\n this._bitcoinWallet = {\r\n totalBalance: 0,\r\n }\r\n\r\n this._bitcoinWallet.accounts = new Array();\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n\r\n let accountNumber = 0;\r\n let isFinished = false;\r\n\r\n do {\r\n // Get account info from blockchain\r\n let account: WalletModel.BitcoinAccountInfo;\r\n \r\n if(this._servers.some(s => s.isSupportXpub == true))\r\n account = await this.AccountDiscoveryByPublicKey(accountNumber);\r\n else\r\n account = await this.AccountDiscoveryByAddresses(accountNumber);\r\n\r\n // Don't add empty account to list of accounts\r\n if(accountNumber > 0 && account.txs == 0) {\r\n return resolve(this._bitcoinWallet);\r\n }\r\n \r\n // set account index\r\n account.accountIndex = accountNumber;\r\n\r\n // Add balance\r\n this._bitcoinWallet.totalBalance += +account.balance;\r\n\r\n // pust to list of wallet accounts\r\n if(this._bitcoinWallet.accounts) {\r\n this._bitcoinWallet.accounts.push(account);\r\n }\r\n\r\n // Calling callback to update the UI\r\n if(accountFindCallBack) {\r\n accountFindCallBack(account);\r\n }\r\n\r\n // if there is any transaction, this wallet could have another account\r\n if(allAccounts && account.txs > 0) {\r\n accountNumber++;\r\n isFinished = false;\r\n } else {\r\n isFinished = true;\r\n }\r\n } while(isFinished == false)\r\n\r\n resolve(this._bitcoinWallet);\r\n }\r\n catch(e){\r\n reject(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Get last discovered wallet\r\n * @returns the last discovered wallet\r\n */\r\n public GetWallet(): WalletModel.BitcoinWalletModel {\r\n return this._bitcoinWallet;\r\n }\r\n\r\n /**\r\n * Get blockchain \r\n */\r\n public GetBlockChain(): BitcoinBlockchain {\r\n return this._bitcoinBlockchain;\r\n }\r\n\r\n public async GetAccountPublicKey(accountNumber: number): Promise {\r\n // account path\r\n const path = PathUtil.GetBipPath(\r\n CoinBaseType.BitcoinBase, // Coin Type\r\n accountNumber, // Account Number\r\n super.GetCoinInfo(), // CoinInfo\r\n );\r\n\r\n // Get publickey from device\r\n const publicKey: PublicKey = await super.GetPublicKey(path.path, false);\r\n\r\n return {\r\n address: publicKey.xpub,\r\n path: path.path,\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param accountNumber \r\n * @returns \r\n */\r\n public async AccountDiscoveryByPublicKey(accountNumber: number = 0): Promise {\r\n // Get account public ket\r\n const publicKey = await this.GetAccountPublicKey(accountNumber);\r\n\r\n // Get account info from blockchain\r\n const accInfo = await this._bitcoinBlockchain.GetAccountInfoByPublicKey(publicKey.address);\r\n\r\n // Save the account public and its path\r\n accInfo.publicKey = publicKey;\r\n\r\n // Set last unused address\r\n if(accInfo.addresses && accInfo.addresses.length > 0) {\r\n let lastAddressPath = accInfo.addresses[accInfo.addresses.length - 1].path;\r\n if(lastAddressPath.length == 5)\r\n {\r\n // next address\r\n lastAddressPath[4]++;\r\n const add = await this.GetAddress(lastAddressPath, false);\r\n accInfo.lastUnusedAddress = {\r\n address: add.address,\r\n path: lastAddressPath,\r\n }\r\n }\r\n } else {\r\n // Get the first address path\r\n const firstAddressPath = PathUtil.GetBipPath(\r\n CoinBaseType.BitcoinBase, // Coin Type\r\n accountNumber, // Account Number\r\n super.GetCoinInfo(), // CoinInfo\r\n false, // No Change\r\n 0 // First Address\r\n );\r\n\r\n // get address from device\r\n const add = await this.GetAddress(firstAddressPath.path, false);\r\n\r\n // set the last unused address\r\n accInfo.lastUnusedAddress = {\r\n address: add.address,\r\n path: firstAddressPath.path,\r\n }\r\n }\r\n\r\n MyConsole.Info(\"BitcoinWallet::AccountDiscoveryByPublicKey->Account info:\", accInfo);\r\n\r\n return accInfo;\r\n }\r\n\r\n public async AccountDiscoveryByAddresses(accountNumber: number = 0): Promise {\r\n return {};\r\n }\r\n\r\n /**\r\n * This function will return a list of transaction of the account, this function is useful for UI\r\n * @param accountNumber Account number\r\n * @param startIndex Transaction start index\r\n * @param numberOfTransactions Number of transaction\r\n */\r\n public async GetTransactionViewList(accountNumber: number = 0, startIndex: number = 0, numberOfTransactions: number ): Promise>{\r\n\r\n if(this._bitcoinWallet.accounts == null){\r\n throw new Error(\"There is no account in wallet, Do Wallet Discovery First\");\r\n }\r\n\r\n // Validate account\r\n if(accountNumber >= this._bitcoinWallet.accounts.length){\r\n throw new Error(`Cannot fine account #${accountNumber}`);\r\n }\r\n\r\n // WE ONLY CHECK THE CURRENT DISCOVERED ACCOUNT\r\n const account = this._bitcoinWallet.accounts[accountNumber];\r\n\r\n // Retrive transaction list from server\r\n //let listOfTransactions = await this._blockchain.GetLatestTransactions(account.addresses, numberOfTransactions, startIndex);\r\n\r\n let txViewList = new Array();\r\n\r\n //TODO: if account.transactions == undefined, we can get transaction using API\r\n if(account.transactions == undefined){\r\n return txViewList;\r\n }\r\n\r\n if(account.transactions.length == 0) {\r\n return txViewList;\r\n }\r\n\r\n // For every transaction received from the blockchain\r\n // These transaction can be either 'send' or 'receive'\r\n // If any of account addresses appeares on any outputs, this is a 'receive' tx\r\n // On the other hand, if any of account addresses appeares on any inputs, this is 'send' tx \r\n account.transactions.forEach(tx => {\r\n let received = Array();\r\n\r\n let isOmni = false;\r\n // Check if any of the wallet addresses is available in TX outputs which means the address received fund.\r\n for(let i=0;i tx.vout[i].isAddress && ca.address == tx.vout[i].addresses[0])){\r\n continue;\r\n }\r\n\r\n // Check if any of the wallet addresses is in output list of transaction\r\n // Theoretically, Transaction's output can be contained more than one wallet address\r\n // So, for each address, we may need to add a receive record\r\n const addressInOutputs = account.tokens?.find(element => tx.vout[i].isAddress && element.name == tx.vout[i].addresses[0]);\r\n\r\n if(addressInOutputs) {\r\n let isFromOwnWallet = false;\r\n let isOpReturn = false;\r\n\r\n //! Check if it's OMNI/OP_RETURN transaction\r\n for(let j = 0; j tx.vin[k].isAddress && walletAddress.name == tx.vin[k].addresses[0])) {\r\n isFromOwnWallet = true;\r\n break;\r\n }\r\n }\r\n\r\n let status : 'RECEIVED' | 'RECEIVED_FROM_OWN' | 'OMNI_RECEIVED' | 'OMNI_CHANGE' = 'RECEIVED';\r\n \r\n if(isOpReturn) {\r\n // is it dust\r\n if(tx.vout[i].value == \"546\") {\r\n status = 'OMNI_RECEIVED';\r\n isOmni = true;\r\n } else if(isFromOwnWallet) {\r\n status = 'OMNI_CHANGE';\r\n isOmni = true;\r\n }\r\n } else {\r\n status = (isFromOwnWallet) ? 'RECEIVED_FROM_OWN' : 'RECEIVED';\r\n }\r\n\r\n\r\n received.push({\r\n address: addressInOutputs.name,\r\n status: status,\r\n value: +tx.vout[i].value,\r\n });\r\n }\r\n }\r\n\r\n // Add received transactions if any\r\n if(received.length > 0){\r\n txViewList.push({\r\n hash: tx.txid,\r\n blockNumber: tx.blockHeight,\r\n date: new Date(tx.blockTime * 1000).toDateString(),\r\n received: received,\r\n isOmni: isOmni,\r\n });\r\n }\r\n\r\n let sent = new Array();\r\n\r\n // Check if any of the wallet addresses is available in TX inputs which means the address sent fund.\r\n for(let i=0; i < tx.vin.length; i++) {\r\n\r\n // To ignore the warning: this._bitcoinWallet.Accounts is possibly undefined\r\n if(this._bitcoinWallet.accounts == undefined)\r\n break;\r\n\r\n // Find if there is any wallet address in this transaction's input\r\n let addressInInputs = account.tokens?.find(aa => tx.vin[i].isAddress && aa.name == tx.vin[i].addresses[0]);\r\n \r\n if(addressInInputs != undefined) {\r\n\r\n //! If there is any OP_RETURN output\r\n let isOpReturn = false;\r\n //! If there is any Dust value in outputs\r\n let isDust = false;\r\n\r\n //! Check if there is a OP_RETURN \r\n for(let k = 0; k tx.vout[j].isAddress && aa.address == tx.vout[j].addresses[0])) {\r\n continue;\r\n }\r\n\r\n // To own address, Possibly OMNI\r\n if(account.tokens?.find(aa => tx.vout[j].isAddress && aa.name == tx.vout[j].addresses[0])){\r\n sent.push({\r\n address: tx.vout[j].addresses[0],\r\n value: +tx.vout[j].value,\r\n status: (isDust && isOpReturn) ? ((tx.vout[j].value == \"546\") ? 'OMNI_SENT' : 'OMNI_CHANGE') : 'SENT_TO_OWN',\r\n });\r\n\r\n continue;\r\n }\r\n\r\n //! Ignore OP_RETURN VALUE 0 TX\r\n if(isOpReturn && tx.vout[j].value == \"0\") {\r\n continue;\r\n }\r\n\r\n sent.push({\r\n address: tx.vout[j].addresses[0],\r\n status: (isOpReturn && tx.vout[j].value == \"546\") ? 'OMNI_SENT' : 'SENT',\r\n value: +tx.vout[j].value,\r\n });\r\n }\r\n\r\n // No need to check the other inputs\r\n break;\r\n }\r\n }\r\n\r\n if(sent.length > 0){\r\n txViewList.push({\r\n hash: tx.txid,\r\n blockNumber: tx.blockHeight,\r\n sent: sent,\r\n date: new Date(tx.blockTime * 1000).toDateString(),\r\n fee: +tx.fees,\r\n isOmni: isOmni,\r\n })\r\n }\r\n });\r\n\r\n MyConsole.Info(txViewList);\r\n\r\n return txViewList;\r\n }\r\n\r\n /**\r\n * Generate a bitcoin transaction to be signed by device\r\n * @param receivers List of receivers\r\n * @param fromAccount Account Number\r\n * @param selectedFee The prefered fee, can be 'economy', 'normal', 'priority', check @CalculateTransactionFee function\r\n */\r\n public async GenerateTransaction(receivers: Array, fromAccount = 0, selectedFee: string = 'normal'): Promise {\r\n if(this._bitcoinWallet.accounts == null){\r\n throw new Error('There is no account in wallet, Do Wallet Discovery First');\r\n }\r\n\r\n // Validate account\r\n if(fromAccount >= this._bitcoinWallet.accounts.length){\r\n throw new Error(`Cannot fine account #${fromAccount}`);\r\n }\r\n\r\n // Validate list of receivers\r\n if(receivers == undefined || receivers.length == 0) {\r\n throw new Error('The list of receivers can not be empty');\r\n }\r\n\r\n const coinInfo = super.GetCoinInfo() as BitcoinBaseCoinInfoModel;\r\n\r\n //! Zcash and Komodo has OverWintered\r\n const isOverWintered = (coinInfo.shortcut == \"ZEC\" || coinInfo.shortcut == \"KMD\");\r\n\r\n //! selected account to send from\r\n let acc = this._bitcoinWallet.accounts[fromAccount];\r\n\r\n //! Get the prefered transaction fee\r\n //! For SECURITY, We must calculate the transaction fee again\r\n let fees = await this.CalculateTransactionFee(receivers, fromAccount);\r\n selectedFee = selectedFee.toLowerCase();\r\n let txFee = +fees.normal;\r\n if(selectedFee == 'economy' || selectedFee == 'low' || selectedFee == 'minimal' || selectedFee == 'min'){\r\n txFee = +fees.economy;\r\n } else if( selectedFee == 'priority' || selectedFee == 'high' || selectedFee == 'fast' || selectedFee == 'max') {\r\n txFee = +fees.priority;\r\n }\r\n \r\n let totalSend = 0;\r\n receivers.forEach(element => {\r\n totalSend += element.value;\r\n });\r\n\r\n\r\n //! Total sent should be more than coin dust limit\r\n if(totalSend < coinInfo.dust_limit){\r\n throw new Error(`Total value is less that this coin dust limit`);\r\n }\r\n\r\n //! sufficient balance?\r\n if((totalSend+txFee) > +acc.balance){\r\n throw new Error(\"No sufficient balance in your account\");\r\n }\r\n\r\n // update UTXO\r\n await this.UpdateAccountUtxos(acc);\r\n\r\n if(!acc.sortedUtxos || acc.sortedUtxos.length == 0) {\r\n throw new Error(\"UTXO list is empty or undefined\");\r\n }\r\n\r\n //! Transaction instance\r\n let tx: BitcoinTx = {\r\n coinName: coinInfo.on_device,\r\n inputs: new Array(),\r\n outputs: new Array(),\r\n options: {},\r\n }\r\n \r\n if(isOverWintered) {\r\n tx.options.overwintered = true;\r\n tx.options.version = 4;\r\n tx.options.version_group_id = 0x892f2085;\r\n if (coinInfo.shortcut == 'ZEC') {\r\n const chainId = await this._bitcoinBlockchain.GetZcashChainId();\r\n if (chainId.chaintip) {\r\n tx.options.branch_id = parseInt(chainId.chaintip, 16);\r\n } else throw new Error('Can not get Zcash chainId');\r\n }\r\n }\r\n\r\n MyConsole.Info(\"BitcoinWallet::GenerateTransaction->sortedUtoxs:\", acc.sortedUtxos);\r\n\r\n //! Input addresses\r\n let utxoBal = 0;\r\n \r\n // Check if we can handle this transaction only with one Input\r\n if (+acc.sortedUtxos[0].value >= totalSend + txFee)\r\n {\r\n // if there is only one utxo\r\n if(acc.sortedUtxos.length == 1) {\r\n let utxo = acc.sortedUtxos[0];\r\n if(utxo.path == null) {\r\n throw new Error(\"BitcoinWallet::GenerateTransaction->UTXO without path\");\r\n }\r\n\r\n tx.inputs.push({\r\n address_n: PathUtil.getHDPath(utxo.path),\r\n prev_hash: utxo.txid,\r\n prev_index: utxo.vout,\r\n amount: utxo.value,\r\n });\r\n\r\n // balance of the UTXO\r\n utxoBal = +utxo.value;\r\n } else {\r\n // Search for the best match\r\n let i = 1;\r\n for (; i < acc.sortedUtxos.length; i++) {\r\n if (+acc.sortedUtxos[i].value < totalSend + txFee) \r\n break;\r\n }\r\n // i is the best utxo for input\r\n let utxo = acc.sortedUtxos[i - 1];\r\n if(utxo.path == null) {\r\n throw new Error(\"BitcoinWallet::GenerateTransaction->UTXO without path\");\r\n } \r\n // add this utxo to inputs\r\n tx.inputs.push({\r\n address_n: PathUtil.getHDPath(utxo.path), \r\n prev_hash: utxo.txid, \r\n prev_index: utxo.vout,\r\n amount: utxo.value\r\n }); \r\n\r\n // balance of the UTXO\r\n utxoBal = +utxo.value;\r\n }\r\n }\r\n else\r\n {\r\n // We need multi inputs to handle this transaction \r\n for (let i = 0; i < acc.sortedUtxos.length; i++) {\r\n let utxo = acc.sortedUtxos[i];\r\n if(utxo.path == null) {\r\n throw new Error(\"BitcoinWallet::GenerateTransaction->UTXO without path\");\r\n } \r\n // add this utxo to inputs \r\n tx.inputs.push({\r\n address_n: PathUtil.getHDPath(utxo.path), \r\n prev_hash: utxo.txid, \r\n prev_index: utxo.vout,\r\n amount: utxo.value\r\n }); \r\n \r\n // balance of the UTXOs\r\n utxoBal += +utxo.value;\r\n\r\n if (utxoBal >= totalSend + txFee)\r\n break;\r\n }\r\n }\r\n\r\n MyConsole.Info(\"BitcoinWallet::GenerateTransaction->best utxo for this transaction:\", tx);\r\n\r\n //! Load previous transactions \r\n await this.LoadPrevTx(acc, tx);\r\n\r\n //! Set the TX's outputs\r\n receivers.forEach(o => {\r\n let output: TransactionOutput = {\r\n address: o.Address,\r\n script_type: EnumOutputScriptType.PAYTOADDRESS,\r\n amount: o.value.toFixed(0),\r\n }\r\n\r\n tx.outputs.push(output);\r\n });\r\n\r\n //! Getting change address\r\n let changeIndex = 0;\r\n if(acc.changeAddresses && acc.changeAddresses.length > 0) {\r\n const pathOfLastChangeAddress = acc.changeAddresses[acc.changeAddresses.length-1].path;\r\n changeIndex = pathOfLastChangeAddress[4] + 1;\r\n }\r\n\r\n //! Add change\r\n //! Change is an output to ourself to which the rest of inputs will transfer\r\n //! Change is Sum(UTXOs) - total_amount_to_send - transaction_fee\r\n let change = utxoBal - totalSend - txFee; \r\n\r\n let changePaths = PathUtil.GetBipPath(\r\n CoinBaseType.BitcoinBase, // Coin Type\r\n fromAccount, // Account Number\r\n coinInfo, // CoinInfo\r\n true, // Change addresses\r\n changeIndex, // address index\r\n );\r\n\r\n //! No change if the change is less than dust\r\n if(coinInfo.dust_limit != null)\r\n {\r\n if(change >= coinInfo.dust_limit) { \r\n tx.outputs.push({\r\n address_n: changePaths.path,\r\n amount: change.toFixed(0),\r\n script_type: (coinInfo.segwit) ? EnumOutputScriptType.PAYTOP2SHWITNESS : EnumOutputScriptType.PAYTOADDRESS,\r\n });\r\n }\r\n }\r\n else if (change > 0) {\r\n tx.outputs.push({\r\n address_n: changePaths.path,\r\n amount: change.toFixed(0),\r\n script_type: (coinInfo.segwit) ? EnumOutputScriptType.PAYTOP2SHWITNESS : EnumOutputScriptType.PAYTOADDRESS,\r\n });\r\n }\r\n\r\n MyConsole.Info(\"BitcoinWallet::GenerateTransaction->Generated transaction to be signed\", tx);\r\n\r\n return tx;\r\n }\r\n\r\n /**\r\n * Send/Broadcast a signed transaction\r\n * @param txData Signed Transaction to be sent to the network\r\n */\r\n public async SendTransaction(txData: string): Promise{\r\n return await this._bitcoinBlockchain.BroadCastTransaction(txData);\r\n }\r\n\r\n public async UpdateAccountUtxos(acc: WalletModel.BitcoinAccountInfo) {\r\n let utxos: WalletModel.BitcoinUtxoModel[] = [];\r\n if(this._servers.some(s => s.isSupportXpub == true)) {\r\n // Get public key\r\n let publicKey: AddressModel;\r\n if(acc.publicKey) {\r\n publicKey = acc.publicKey;\r\n } else { \r\n publicKey = await this.GetAccountPublicKey(acc.accountIndex ?? 0);\r\n }\r\n\r\n // get all utxos\r\n utxos = await this._bitcoinBlockchain.GetAccountUtxoByPublicKey(publicKey.address)\r\n }\r\n //TODO: Get UTXO by address\r\n else {\r\n\r\n }\r\n\r\n acc.sortedUtxos = utxos.sort((a,b) => {\r\n const aValue = +a.value;\r\n const bValue = +b.value;\r\n if(aValue > bValue) {\r\n return -1;\r\n } \r\n else if(aValue == bValue) {\r\n return 0;\r\n } \r\n else {\r\n return 1;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * To calculate the TX fee\r\n * @param receivers List of receivers (outputs)\r\n * @param fromAccount The account number you wish to send from\r\n */\r\n public async CalculateTransactionFee(receivers: Array, fromAccount: number ): Promise {\r\n\r\n if(this._bitcoinWallet.accounts == null){\r\n throw new Error('There is no account in wallet, Do Wallet Discovery First');\r\n }\r\n\r\n // Validate account\r\n if(fromAccount >= this._bitcoinWallet.accounts.length){\r\n throw new Error(`Cannot find account #${fromAccount}`);\r\n }\r\n\r\n // Validate list of receivers\r\n if(receivers == undefined || receivers.length == 0) {\r\n throw new Error('The list of receivers can not be empty');\r\n }\r\n\r\n const coinInfo = this.GetCoinInfo() as BitcoinBaseCoinInfoModel;\r\n\r\n //! Fixed fees\r\n if(super.GetCoinInfo().name == \"Dogecoin\") {\r\n return {\r\n economy: \"100000000\",\r\n normal: \"100000000\",\r\n priority: \"100000000\",\r\n decimal: coinInfo.decimals,\r\n unit: coinInfo.shortcut,\r\n }\r\n }\r\n\r\n // Account\r\n let acc = this._bitcoinWallet.accounts[fromAccount];\r\n\r\n // Get the current fees from blockchain\r\n let txFees: WalletModel.BitcoinFee;\r\n if(super.GetCoinInfo().name == \"Zcash\") {\r\n txFees = {\r\n economy: 10, // per KB\r\n high: 10,\r\n normal: 10\r\n }\r\n }\r\n else\r\n {\r\n txFees = await this._bitcoinBlockchain.GetTxFee(coinInfo.name == 'Bitcoin');\r\n }\r\n\r\n // Calculate transaction length\r\n let txLen = await this.CalculateTxLen(receivers, acc, txFees);\r\n\r\n let fees: BitcoinFeeSelectionModel = {\r\n economy: Math.floor((txLen * txFees.economy)).toString(),\r\n normal: Math.floor((txLen * txFees.normal)).toString(),\r\n priority: Math.floor((txLen * txFees.high)).toString(),\r\n unit: coinInfo.shortcut,\r\n decimal: coinInfo.decimals,\r\n }\r\n\r\n MyConsole.Info(\"BitcoinWallet::CalculateTransactionFee->Tx fees\", fees);\r\n\r\n return fees;\r\n }\r\n\r\n /**\r\n * Estimate the length of a transaction\r\n * @param receivers List of receivers (outputs)\r\n * @param acc The account number you wish to send from\r\n * @param txFees The current fee rated \r\n */\r\n public async CalculateTxLen(receivers: Array, acc: WalletModel.BitcoinAccountInfo, txFees: WalletModel.BitcoinFee): Promise {\r\n if(this._bitcoinWallet.accounts == null){\r\n throw new Error('There is no account in wallet, Do Wallet Discovery First');\r\n }\r\n\r\n /*\r\n s = 10 + 148×n + 34×t, ±n\r\n\r\n where n is the number of inputs and t is the number of outputs. The input contribution accounts for outpoint (36 bytes) script length (1 byte),\r\n script (107 bytes), and sequence (4 bytes). The output contribution accounts for the value field (8 bytes), script length (1 byte), \r\n and script (25 bytes).\r\n\r\n For example, a one-input, one-output transaction would require on average 193 bytes (10 + 148 + 35). \r\n A more realistic one-input, two-output transaction that allowed the collection of change would require on average 226 bytes (10 + 148 + 2×34). \r\n A six-input, six-output CoinJoin transaction would require on average 1,102 bytes (10 + 6×148 + 6×34), and so on.\r\n */\r\n //! We should calculate the size of this transaction to calculate the actual fee\r\n let txLen = this._TX_DEFAULT_OVERHEAD_SIZE;\r\n receivers.forEach(receivers => {\r\n // OPRETURN transaction\r\n if(receivers.data != undefined) {\r\n // OPRETURN + Data Lenght\r\n txLen += 1 + receivers.data.length;\r\n }\r\n else {\r\n txLen += this._TX_DEFAULT_OUTPUT_SIZE;\r\n }\r\n });\r\n\r\n //! we may have at least one change address\r\n txLen += this._TX_DEFAULT_OUTPUT_SIZE;\r\n\r\n //! Create list of account UTXO\r\n if(acc.sortedUtxos == null) {\r\n await this.UpdateAccountUtxos(acc);\r\n }\r\n\r\n if(acc.sortedUtxos == null || acc.sortedUtxos.length == 0) {\r\n MyConsole.Info(\"No UTXO\");\r\n //! Bitcoin based transactions has 1 input at least\r\n return txLen + this._TX_DEFAULT_INPUT_SIZE;\r\n }\r\n\r\n MyConsole.Info(\"Sorted UTXO\", acc.sortedUtxos);\r\n\r\n //! Input addresses\r\n let utxoBal = 0;\r\n let totalSend = 0;\r\n receivers.forEach(element => {\r\n totalSend += element.value;\r\n });\r\n\r\n // Check if we can handle this transaction only with one Input\r\n if (+acc.sortedUtxos[0].value >= totalSend + (txFees.economy * (txLen + this._TX_DEFAULT_INPUT_SIZE)))\r\n { \r\n txLen += this._TX_DEFAULT_INPUT_SIZE;\r\n }\r\n else\r\n {\r\n // We need multi input to handle this transaction \r\n for (let i = 0; i < acc.sortedUtxos.length; i++) { \r\n txLen += this._TX_DEFAULT_INPUT_SIZE;\r\n utxoBal += +acc.sortedUtxos[i].value;\r\n\r\n if (utxoBal >= totalSend + (txFees.economy * txLen))\r\n break;\r\n }\r\n }\r\n\r\n return txLen;\r\n }\r\n\r\n /**\r\n * Validating Bitcoin/Litecoin/BitcoinGold and etc addresses\r\n * @param address The address to be checked\r\n */\r\n public IsAddressValid(address: string): boolean {\r\n let coinInfo = this.GetCoinInfo();\r\n\r\n let symbol: string = coinInfo.shortcut;\r\n if(symbol == \"TEST\") {\r\n symbol = \"tBTC\";\r\n }\r\n\r\n if(coinInfo.test != undefined && coinInfo.test == true){\r\n if(symbol.substr(0,1) == 't'){\r\n symbol = symbol.substring(1);\r\n }\r\n }\r\n\r\n if(!WAValidator.findCurrency(symbol)){\r\n return false;\r\n }\r\n \r\n if(coinInfo.test != undefined && coinInfo.test == true) {\r\n if(WAValidator.validate(address, symbol, 'testnet')) {\r\n return true;\r\n }\r\n } else {\r\n if(WAValidator.validate(address, symbol)) {\r\n return true;\r\n }\r\n }\r\n \r\n return false;\r\n }\r\n\r\n /**\r\n * Loading previous transaction of each input(s).\r\n * @param tx Bitcoin transaction \r\n */\r\n private async LoadPrevTx(acc: WalletModel.BitcoinAccountInfo, tx: BitcoinTx) {\r\n if(tx.inputs == undefined || tx.inputs.length == 0){\r\n throw new Error(\"BitcoinWallet::LoadPrevTx->Transaction inputs cannot be null or empty\");\r\n }\r\n\r\n if(acc.transactions == null || acc.transactions.length == 0) {\r\n throw new Error(\"BitcoinWallet::LoadPrevTx->PrevTx are not set correctly\")\r\n }\r\n\r\n tx.refTxs = new Array();\r\n tx.inputs.forEach(txInput => {\r\n \r\n let prev = acc.transactions?.find(t => t.txid == txInput.prev_hash);\r\n if(prev == null) {\r\n throw new Error(\"BitcoinWallet::LoadPrevTx->No transaction found for this UTXO\")\r\n }\r\n\r\n let ref: RefTransaction = {\r\n hash: prev.txid,\r\n version: prev.version,\r\n lock_time: prev.lockTime ?? 0,\r\n bin_outputs: [],\r\n inputs: [],\r\n }\r\n\r\n prev.vin.forEach( inp => {\r\n if(inp.txid == null) {\r\n throw new Error(\"BitcoinWallet::LoadPrevTx->PrevTransation id is null\");\r\n }\r\n\r\n ref.inputs.push({\r\n prev_hash: inp.txid,\r\n prev_index: inp.vout ?? 0,\r\n sequence: inp.sequence,\r\n script_sig: inp.hex,\r\n });\r\n });\r\n\r\n prev.vout.forEach( out => {\r\n if(out.hex == null) {\r\n throw new Error(\"BitcoinWallet::LoadPrevTx->PrevTransation hex is null\");\r\n }\r\n ref.bin_outputs.push({\r\n amount: out.value,\r\n script_pubkey: out.hex,\r\n })\r\n });\r\n\r\n if(tx.refTxs){\r\n tx.refTxs.push(ref);\r\n }\r\n });\r\n }\r\n}\r\n\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport * as WalletModel from '../models/EthereumWalletModel';\r\nimport * as GenericWalletModel from '../models/GenericWalletModel';\r\nimport { CoinBaseType } from '../coins/CoinInfo';\r\nimport { Device } from '../device/Device';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport { EthereumBaseCoinInfoModel, Erc20BaseCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { EthereumTx } from '../models/EthereumTx';\r\nimport { RlpEncoding } from '../utils/rlp-encoding';\r\nimport * as ProkeyResponses from '../models/Prokey';\r\nimport { EthereumBlockchain } from '../blockchain/EthereumBlockchain';\r\nimport { BaseWallet } from './BaseWallet';\r\nimport { EthereumAddress } from '../models/Prokey';\r\nimport { MyConsole } from '../utils/console';\r\nimport * as EthereumNetworks from '../utils/ethereum-networks';\r\nimport BigNumber from 'bignumber.js';\r\nimport { BlockchainProviders, BlockchainServerModel } from '../blockchain/BlockchainProviders';\r\nimport { FeeData } from '@ethersproject/providers';\r\nimport { supportsEIP1559 } from '../utils/DeviceUtils';\r\nvar WAValidator = require('multicoin-address-validator');\r\n\r\n/**\r\n * If you wish to discover and use your ethereum wallet, you need to use this class.\r\n * This class can be used for all ethereum based coins and all ERC20.\r\n */\r\nexport class EthereumWallet extends BaseWallet {\r\n _ethereumWallet!: WalletModel.EthereumWalletModel;\r\n _gasLimit: number = 21000;\r\n _ethBlockchain: EthereumBlockchain;\r\n _isErc20 = false;\r\n _network = 'eth';\r\n _contractAddress: string = '';\r\n private _servers: BlockchainServerModel[];\r\n\r\n /**\r\n * class constructor\r\n * @param device Prokey device instance\r\n * @param coinNameOrContractAddress Coin name or contract address of ERC20, Check /data/ProkeyCoinsInfo.json\r\n * @param isErc20 Should be true if ERC20 is desired.\r\n * @param coinInfo Optional coin info, If this parameter is not null, the wallet skips coinNameOrContractAddress\r\n */\r\n constructor(\r\n device: Device,\r\n coinNameOrContractAddress: string,\r\n isErc20: boolean,\r\n coinInfo?: Erc20BaseCoinInfoModel | EthereumBaseCoinInfoModel\r\n ) {\r\n //! If coinInfo parameter is not null, the value of coinNameOrContractAddress doesn't matter\r\n super(\r\n device,\r\n coinNameOrContractAddress,\r\n isErc20 == true ? CoinBaseType.ERC20 : CoinBaseType.EthereumBase,\r\n undefined,\r\n coinInfo\r\n );\r\n\r\n this._isErc20 = isErc20;\r\n if (isErc20) {\r\n if (coinInfo) {\r\n this._contractAddress = (coinInfo as Erc20BaseCoinInfoModel).address;\r\n } else {\r\n this._contractAddress = coinNameOrContractAddress;\r\n }\r\n }\r\n\r\n this._servers = BlockchainProviders.Get(super.GetCoinInfo());\r\n\r\n if (isErc20) {\r\n this._gasLimit = 200000;\r\n const ci = super.GetCoinInfo() as Erc20BaseCoinInfoModel;\r\n this._network = EthereumNetworks.GetNetworkByChainId(ci.chain_id);\r\n this._ethBlockchain = new EthereumBlockchain(this._servers, true, ci);\r\n } else {\r\n const ci = this.GetCoinInfo() as EthereumBaseCoinInfoModel;\r\n this._network = EthereumNetworks.GetNetworkByChainId(ci.chain_id);\r\n this._ethBlockchain = new EthereumBlockchain(this._servers);\r\n }\r\n }\r\n\r\n /**\r\n * Start searching blockchain to discovery(find) the wallet\r\n * @param accountFindCallBack is an optional callback function, this function will be called when an account discovered\r\n * @returns Ethereum Wallet Model\r\n */\r\n public async StartDiscovery(\r\n accountFindCallBack?: (accountInfo: WalletModel.EthereumAccountInfo) => void,\r\n allAccounts = false\r\n ): Promise {\r\n this._ethereumWallet = {\r\n totalBalance: 0,\r\n };\r\n\r\n return new Promise(async (resolve, reject) => {\r\n let an = 0;\r\n try {\r\n do {\r\n // Discover the account number n\r\n let account = await this.AccountDiscovery(an);\r\n\r\n if (this._ethereumWallet.accounts == undefined) {\r\n this._ethereumWallet.accounts = new Array();\r\n }\r\n\r\n // For unit test purposes\r\n if (\r\n this._ethereumWallet.accounts.length > 0 &&\r\n this._ethereumWallet.accounts[an - 1].address == account.address\r\n ) {\r\n return resolve(this._ethereumWallet);\r\n }\r\n\r\n // Don't add empty account to list of accounts\r\n if (an > 0 && account.txs == 0) {\r\n return resolve(this._ethereumWallet);\r\n }\r\n\r\n this._ethereumWallet.accounts.push(account);\r\n\r\n // Calling callback to update the UI\r\n if (accountFindCallBack) {\r\n accountFindCallBack(account);\r\n }\r\n\r\n // update the total wallet balance\r\n this._ethereumWallet.totalBalance += +account.balance;\r\n\r\n // go for next account\r\n an++;\r\n } while (true);\r\n } catch (reason) {\r\n reject(reason);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Account Discovery\r\n * @param accountNumber account number to be discovered\r\n */\r\n public async AccountDiscovery(accountNumber: number = 0): Promise {\r\n let path = PathUtil.GetBipPath(\r\n this._isErc20 ? CoinBaseType.ERC20 : CoinBaseType.EthereumBase, // CoinType\r\n accountNumber, // Account Number\r\n super.GetCoinInfo() // Coin Info\r\n );\r\n\r\n // Getting addresses from Prokey\r\n let address = await super.GetAddress(path.path, false);\r\n path.address = address.address;\r\n \r\n // Getting addresses' info\r\n var accInfo = await this._ethBlockchain.GetAddressInfo(path);\r\n accInfo.accountIndex = accountNumber;\r\n\r\n // When using public nodes there are no transactions or token transfers\r\n // because they don't give transaction history.\r\n // so if isDirectQueryFromGeth is true we don't continue the code and directly return the account info\r\n if (accInfo.isDirectQueryFromGeth) return accInfo;\r\n\r\n // Should do some changes and filters to the account if it is erc20 contract\r\n if (this._isErc20) {\r\n accInfo.ethBalance = accInfo.balance;\r\n if (accInfo.transactions && accInfo.transactions.length > 0) {\r\n // Filter contract transactions and reassign to account\r\n const erc20Transactions = accInfo.transactions.filter((tx) => {\r\n if (tx.tokenTransfers && tx.tokenTransfers.length > 0) {\r\n return tx.tokenTransfers[0].token == this._contractAddress;\r\n }\r\n return false;\r\n });\r\n accInfo.transactions = erc20Transactions;\r\n accInfo.txs = erc20Transactions.length;\r\n\r\n // Reassign balance with contract token balance\r\n if (accInfo.tokens && accInfo.tokens.length > 0) {\r\n const tokenBalance = accInfo.tokens.find(\r\n (token) => token.contract.toLocaleLowerCase() == this._contractAddress.toLocaleLowerCase()\r\n )?.balance;\r\n if (tokenBalance) {\r\n accInfo.balance = tokenBalance;\r\n } else {\r\n accInfo.balance = '0';\r\n }\r\n } else {\r\n accInfo.balance = '0';\r\n }\r\n\r\n delete accInfo.tokens;\r\n }\r\n } else if (!this._isErc20) {\r\n // Only return transactions if eth token is transferred\r\n const transactions = accInfo.transactions?.filter((tx) => {\r\n return tx.tokenTransfers == undefined;\r\n });\r\n if (transactions) {\r\n accInfo.transactions = transactions;\r\n }\r\n }\r\n\r\n MyConsole.Info('EthereumWallet::AccountDiscovery->Account info:', accInfo);\r\n\r\n return accInfo;\r\n }\r\n\r\n /**\r\n * This function generates an ethereum transaction\r\n * @param receivedAddress Address to send the fund\r\n * @param amount Amount to be sent in WEI\r\n * @param accountNumber Account number to send fund from\r\n */\r\n public async GenerateTransaction(\r\n receivedAddress: string,\r\n amount: BigNumber,\r\n accountNumber: number = 0\r\n ): Promise {\r\n // Check if wallet is already loaded\r\n if (this._ethereumWallet == null || this._ethereumWallet.accounts == null) {\r\n throw new Error('Wallet is not loaded');\r\n }\r\n\r\n // Validate accountNumber\r\n if (accountNumber >= this._ethereumWallet.accounts.length) {\r\n throw new Error('Account number is wrong');\r\n }\r\n\r\n // Cast coin info model\r\n let coinInfo = super.GetCoinInfo() as Erc20BaseCoinInfoModel | EthereumBaseCoinInfoModel;\r\n\r\n const deviceFeatures = await this.GetDevice().GetFeatures();\r\n const deviceSupportsEIP1559 = supportsEIP1559(deviceFeatures, this._network);\r\n // Get the gas params from server\r\n const feeData = await this._ethBlockchain.GetFeeData(coinInfo.chain_id);\r\n const transactionFee = await this.CalculateTransactionFee(deviceSupportsEIP1559, feeData);\r\n\r\n // Get the account\r\n let account = this._ethereumWallet.accounts[accountNumber];\r\n\r\n if (account.addressModel == null) {\r\n throw new Error('Invalid data');\r\n }\r\n\r\n let nonce = '0';\r\n if (this._isErc20) {\r\n // Check transaction fee\r\n if (account.ethBalance == null || transactionFee > +account.ethBalance) {\r\n let networkName = EthereumNetworks.GetNetworkFullNameByChainId(coinInfo.chain_id);\r\n throw new Error(`Insufficient balance in the ${networkName} wallet to pay the transaction fee`);\r\n }\r\n\r\n // Check account balance\r\n if (amount.gt(account.balance)) {\r\n throw new Error('Insufficient balance');\r\n }\r\n\r\n // Set the nonce\r\n nonce = account.nonce || '0';\r\n } else {\r\n // Check account balance\r\n if (amount.gt(account.balance)) {\r\n throw new Error('Insufficient balance');\r\n }\r\n\r\n // Check account balance for pay the tx fee\r\n\r\n if (amount.gt(+account.balance - transactionFee)) {\r\n throw new Error('Insufficient balance to pay the transaction fee');\r\n }\r\n\r\n // Set the nonce\r\n nonce = account.nonce || '0';\r\n }\r\n\r\n // Generate Transaction\r\n let txToSign: EthereumTx = {\r\n address_n: account.addressModel.path,\r\n to: receivedAddress,\r\n value: amount.toString(16),\r\n nonce: (+nonce).toString(16),\r\n gasLimit: this._gasLimit.toString(16),\r\n chainId: coinInfo.chain_id,\r\n };\r\n\r\n // Check if device supports EIP1559 and set fee based on that.\r\n if (deviceSupportsEIP1559) {\r\n // EIP1559 gas params\r\n txToSign.maxFeePerGas = feeData.maxFeePerGas?.toHexString();\r\n txToSign.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas?.toHexString();\r\n } else {\r\n // Legacy gas param\r\n txToSign.gasPrice = feeData.gasPrice?.toHexString();\r\n }\r\n\r\n if (this._isErc20) {\r\n //! TO ERC20 contract address\r\n txToSign.to = this._contractAddress;\r\n //! Value should be empty\r\n txToSign.value = '0';\r\n\r\n txToSign.data = this.GetErc20TransactionData(receivedAddress, amount);\r\n }\r\n\r\n //! Log the transaction for debugging porpose\r\n MyConsole.Info('EthereumWallet::GenerateTransaction->Tx to sign', txToSign);\r\n\r\n return txToSign;\r\n }\r\n\r\n /**\r\n * This function will prepare raw RLP encoded transaction to be sent\r\n * @param transaction Signed Transaction\r\n * @param signedValues Signature values, R,S and V\r\n */\r\n public async PrepareAndSendTransaction(transaction: EthereumTx, signedValues: ProkeyResponses.EthereumSignedTx) {\r\n if (transaction == undefined) {\r\n throw new Error('Transaction can not be null');\r\n }\r\n\r\n if (signedValues == undefined) {\r\n throw new Error('SignedValues can not be null');\r\n }\r\n\r\n let rlpTx = '';\r\n // Encoding transaction\r\n if (transaction.gasPrice != null) {\r\n rlpTx = this.legacyTxRlpEncode(transaction, signedValues);\r\n } else {\r\n rlpTx = this.eip1559TxRlpEncode(transaction, signedValues);\r\n }\r\n\r\n console.log(rlpTx);\r\n\r\n return await this.SendTransaction(rlpTx);\r\n }\r\n\r\n /**\r\n * To send a transaction to the network\r\n * @param txData Transaction to be sent to the network\r\n */\r\n public async SendTransaction(txData: string): Promise {\r\n return this._ethBlockchain.BroadCastTransaction(txData);\r\n }\r\n\r\n /**\r\n * To get a list of transaction to show to end user on the UI\r\n * @param accountNumber\r\n * @param startIndex\r\n * @param numberOfTransactions\r\n */\r\n public async GetTransactionViewList(\r\n accountNumber: number = 0,\r\n startIndex: number = 0,\r\n numberOfTransactions: number\r\n ): Promise> {\r\n if (this._ethereumWallet.accounts == null) {\r\n throw new Error('There is no account in wallet, Do Wallet Discovery First');\r\n }\r\n\r\n // Validate account\r\n if (accountNumber >= this._ethereumWallet.accounts.length) {\r\n throw new Error(`Cannot fine account #${accountNumber}`);\r\n }\r\n\r\n // WE ONLY CHECK THE CURRENT ACCOUNT\r\n const account = this._ethereumWallet.accounts[accountNumber];\r\n\r\n let txViews = new Array();\r\n\r\n if (account.transactions == undefined || account.transactions.length == 0) {\r\n return txViews;\r\n }\r\n\r\n account.transactions.forEach((tx) => {\r\n let isSent = false;\r\n // To skip the warning/error\r\n if (account.addressModel != undefined) {\r\n isSent = account.addressModel.address.toLowerCase() == tx.vin[0].addresses[0].toLocaleLowerCase();\r\n }\r\n\r\n let txView: WalletModel.EthereumTransactionView = {\r\n blockNumber: tx.blockHeight,\r\n hash: tx.txid,\r\n fee: +tx.fees,\r\n date: new Date(tx.blockTime * 1000).toLocaleString(),\r\n status: isSent ? 'SENT' : 'RECEIVED',\r\n amount: this._isErc20 ? +tx.tokenTransfers[0].value : +tx.value,\r\n };\r\n\r\n if (isSent) {\r\n txView.sent = tx.vout[0].addresses[0];\r\n } else {\r\n txView.received = tx.vin[0].addresses[0];\r\n }\r\n\r\n txViews.push(txView);\r\n });\r\n\r\n return txViews;\r\n }\r\n\r\n /**\r\n * Validation Ethereum\\ERC20\\ETC and etc address\r\n * @param address The address to be checked\r\n */\r\n public IsAddressValid(address: string): boolean {\r\n let coinInfo = this.GetCoinInfo();\r\n\r\n let symbol: string = coinInfo.shortcut.toLocaleLowerCase();\r\n //! these coins are use same address encoding model\r\n if (this._isErc20 || symbol == 'bnb' || symbol == 'okt' || symbol == 'rbtc' || coinInfo.test == true) {\r\n symbol = 'ETH';\r\n }\r\n\r\n if (coinInfo.test != undefined && coinInfo.test) {\r\n if (symbol.substr(0, 1) == 't') {\r\n symbol = symbol.substring(1);\r\n }\r\n }\r\n\r\n if (!WAValidator.findCurrency(symbol)) {\r\n return false;\r\n }\r\n\r\n if (coinInfo.test != undefined && coinInfo.test) {\r\n if (WAValidator.validate(address, symbol, 'testnet')) {\r\n return true;\r\n }\r\n } else {\r\n if (WAValidator.validate(address, symbol)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get the transaction fee\r\n * @returns TransactionFee\r\n * Legacy: GasLimit * GasPrice\r\n * EIP1559 : GasLimit * maxFeePerGas\r\n */\r\n public async CalculateTransactionFee(isEIP1559 = false, feeData?: FeeData): Promise {\r\n if (!feeData) {\r\n feeData = await this._ethBlockchain.GetFeeData((super.GetCoinInfo() as Erc20BaseCoinInfoModel).chain_id);\r\n }\r\n\r\n if (isEIP1559) {\r\n // The maximum fee user is willing to pay for this transaction is calculated here that inclusive baseFeePerGas & maxPriorityFeePerGas\r\n // However, this is not the actual fee that the user will pay, the actual will be:\r\n // GasLimit * (baseFeePerGas + maxPriorityFeePerGas)\r\n // To make sure that user has enough balance and this transaction will be confirmed, we consider transaction fee as GasLimit * maxFeePerGas\r\n // Note: maxFeePerGas = (2 * baseFeePerGas) + maxPriorityFeePerGas\r\n return this._gasLimit * feeData.maxFeePerGas!.toNumber();\r\n }\r\n\r\n return feeData.gasPrice!.toNumber() * this._gasLimit;\r\n }\r\n\r\n private legacyTxRlpEncode(tx: EthereumTx, signedValues: ProkeyResponses.EthereumSignedTx) {\r\n let nonce = tx.nonce == '0' || tx.nonce == '00' ? '' : tx.nonce;\r\n let value = tx.value == '0' || tx.value == '00' ? '' : tx.value;\r\n const { r, s, v } = signedValues;\r\n let rlp: RlpEncoding = new RlpEncoding();\r\n\r\n const rawTx = [\r\n '0x' + nonce,\r\n '0x' + (tx.gasPrice || ''),\r\n '0x' + (tx.gasLimit || ''),\r\n '0x' + tx.to.toLowerCase() || '',\r\n '0x' + value,\r\n '0x' + (tx.data || ''),\r\n ];\r\n\r\n const toEncode = [...rawTx, ...[v, r, s]];\r\n return '0x' + rlp.encode(toEncode).toString('hex');\r\n }\r\n\r\n private eip1559TxRlpEncode(tx: EthereumTx, signedValues: ProkeyResponses.EthereumSignedTx) {\r\n let nonce = tx.nonce == '0' || tx.nonce == '00' ? '' : tx.nonce;\r\n let value = tx.value == '0' || tx.value == '00' ? '' : tx.value;\r\n let v = signedValues.v == '0x0' || signedValues.v == '0x00' ? '' : signedValues.v;\r\n\r\n let rlp: RlpEncoding = new RlpEncoding();\r\n\r\n console.log(signedValues);\r\n\r\n const rawTx = [\r\n '0x' + (tx.chainId || ''),\r\n '0x' + nonce,\r\n '0x' + tx.maxPriorityFeePerGas,\r\n '0x' + tx.maxFeePerGas,\r\n '0x' + (tx.gasLimit || ''),\r\n '0x' + tx.to.toLowerCase() || '',\r\n '0x' + value,\r\n '0x' + (tx.data || ''),\r\n [],\r\n ];\r\n\r\n const toEncode = [...rawTx, ...[v, signedValues.r, signedValues.s]];\r\n return '0x02' + rlp.encode(toEncode).toString('hex');\r\n }\r\n\r\n /**\r\n * Get address info of ETH address, For signing an ERC20 transaction, The last nonce number of ETH address is needed.\r\n * @param address ETH address\r\n */\r\n private async GetEthAddressInfo(address: string): Promise {\r\n var ethBlockchain = new EthereumBlockchain(this._servers);\r\n var addInfo = await ethBlockchain.GetAddressInfo({\r\n address: address,\r\n path: [],\r\n });\r\n\r\n return addInfo;\r\n }\r\n\r\n /**\r\n * Estimate the transaction fee (GasLimit)\r\n * @param from The wallet address\r\n * @param to The receiver address\r\n * @param data ERC20 Data (Function call with parameters)\r\n * @returns Estimated fee for this transaction\r\n */\r\n // private async EstimateFee(from: string, to: string, data: string): Promise {\r\n // try {\r\n // var fee = await this._ethBlockChain.EstimateFee(from, to, data);\r\n\r\n // if (fee < 40000)\r\n // fee = 40000;\r\n // return fee;\r\n // } catch (error) {\r\n // return 65000;\r\n // }\r\n // }\r\n\r\n /**\r\n * Get ERC20 data for calling \"TransferTo\" function\r\n * @param receivingAddress The receiver address\r\n * @param amount Amount to be send\r\n * @returns Data in string\r\n */\r\n private GetErc20TransactionData(receivingAddress: string, amount: BigNumber): string {\r\n //! The address must not start with 0x\r\n if (receivingAddress.substr(0, 2).toLowerCase() == '0x') {\r\n receivingAddress = receivingAddress.substr(2);\r\n }\r\n\r\n let amountInHex = amount.toString(16);\r\n let amount64 = ('0000000000000000000000000000000000000000000000000000000000000000' + amountInHex).substr(-64);\r\n //! Data struct is 16Bytes * TransferTo(a9059cbb...) + 20Bytes * receiverAddress + 32Bytes * amount\r\n return `a9059cbb000000000000000000000000${receivingAddress}${amount64}`; //! SmartContract function call\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n * \r\n * Hadi Robati, hadi@prokey.io\r\n * \r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { CoinBaseType } from '../coins/CoinInfo';\r\nimport { Device } from '../device/Device';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport { BitcoinTx } from '../models/BitcoinTx';\r\nimport * as WalletModel from '../models/OmniWalletModel';\r\nimport * as GenericWalletModel from '../models/GenericWalletModel';\r\nimport { EnumOutputScriptType, RefTransaction } from '../models/Prokey';\r\nimport { BitcoinFeeSelectionModel } from '../models/FeeSelectionModel';\r\nimport { BaseWallet } from './BaseWallet';\r\nvar WAValidator = require('multicoin-address-validator');\r\nimport * as Utility from '../utils/utils';\r\nimport { MyConsole } from '../utils/console';\r\nimport { OmniCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { BlockchainServerModel, BlockchainProviders } from '../blockchain/BlockchainProviders';\r\nimport { BitcoinBlockchain } from '../blockchain/BitcoinBlockchain';\r\n\r\n/**\r\n * If you wish to discover and use the omni wallet, you need to use this class.\r\n * This class can be used for all OmniLayer based coins over Bitcoin blockchain.\r\n */\r\nexport class OmniWallet extends BaseWallet {\r\n private _wallet!: WalletModel.OmniWalletModel;\r\n private _bitcoinBlockchain: BitcoinBlockchain;\r\n private _servers: BlockchainServerModel[];\r\n private _propertyId: number;\r\n\r\n _TX_DEFAULT_INPUT_SIZE = 148;\r\n _TX_DEFAULT_OUTPUT_SIZE = 180;\r\n _TX_DEFAULT_OVERHEAD_SIZE = 192;\r\n\r\n /**\r\n *\r\n * @param device The prokey device instance\r\n * @param coinName Coin name, Check /data/ProkeyCoinsInfo.json\r\n */\r\n constructor(device: Device, coinName: string, propertyId?: number) {\r\n super(device, coinName, CoinBaseType.OMNI);\r\n\r\n const coinInfo = super.GetCoinInfo() as OmniCoinInfoModel;\r\n this._propertyId = coinInfo.proparty_id;\r\n\r\n // set the servers\r\n this._servers = BlockchainProviders.Get(coinInfo);\r\n\r\n // initial the blockchain instance\r\n this._bitcoinBlockchain = new BitcoinBlockchain(this._servers);\r\n }\r\n\r\n /**\r\n * Start searching blockchain to discovery(find) the wallet\r\n * @param accountFindCallBack is an optional callback function, this function will be called when an account discovered\r\n * @param allAccounts true means discover all account, false means discover only the first account\r\n */\r\n public async StartDiscovery(\r\n accountFindCallBack?: (accountInfo: WalletModel.OmniAccountInfo) => void,\r\n allAccounts = true\r\n ): Promise {\r\n this._wallet = {\r\n totalBalance: 0,\r\n accounts: [],\r\n };\r\n\r\n return new Promise(async (resolve, reject) => {\r\n let an = 0;\r\n try {\r\n do {\r\n // Discover the account number n\r\n let account = await this.AccountDiscovery(an);\r\n\r\n if (an > 0 && account.transactions?.length == 0) {\r\n return resolve(this._wallet);\r\n }\r\n\r\n // update the total wallet balance\r\n this._wallet.totalBalance += account.balance;\r\n\r\n this._wallet.accounts?.push(account);\r\n\r\n if (accountFindCallBack) {\r\n accountFindCallBack(account);\r\n }\r\n\r\n // go for next account\r\n an++;\r\n } while (allAccounts);\r\n } catch (reason) {\r\n reject(reason);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Account Discovery\r\n * @param accountNumber Account number to be discovered\r\n */\r\n public async AccountDiscovery(accountNumber: number = 0): Promise {\r\n let accountInfo: WalletModel.OmniAccountInfo = {\r\n accountIndex: accountNumber,\r\n balance: 0,\r\n transactions: [],\r\n };\r\n\r\n let path = PathUtil.GetBipPath(\r\n CoinBaseType.OMNI, // Coin Type\r\n accountNumber // Account Number\r\n );\r\n\r\n // Getting addresses from Prokey\r\n let address = await super.GetAddress(path.path, false);\r\n\r\n // Update the account info address\r\n accountInfo.addressModel = {\r\n address: address.address,\r\n path: path.path,\r\n };\r\n\r\n // Getting address' info from blockchain\r\n var addInfo = await this._bitcoinBlockchain.GetAddressInfo(accountInfo.addressModel);\r\n\r\n accountInfo.bitcoinAddressInfo = addInfo;\r\n\r\n // No transaction means no balance\r\n if (addInfo.txs == 0 || addInfo.transactions == null) {\r\n return accountInfo;\r\n }\r\n\r\n // Search for OMNI Layer Transactions\r\n addInfo.transactions.forEach((tx) => {\r\n let isOmni = false;\r\n let isDust = false;\r\n let receiverAddress = '';\r\n let pid = 0;\r\n let value = 0;\r\n\r\n tx.vout.forEach((out) => {\r\n if (out.isAddress && out.value == '546') {\r\n receiverAddress = out.addresses[0];\r\n isDust = true;\r\n }\r\n // OmniLayer SIMPLE SEND data structure\r\n // OP_RETURN LEN omni Version PropertyId Value\r\n // 6a 14 6f6d6e69 [4 bytes] [4 Bytes] [8 byte]\r\n else if (\r\n out.hex && // if hex data is present\r\n out.hex.length == 44 && // we have 1 byte for OP_RETURN and 1 byte for len and 20 bytes for data (each byte in string hex format needs two string characters)\r\n out.hex?.substring(0, 12).toLocaleLowerCase() == '6a146f6d6e69' // fixed start bytes\r\n ) {\r\n // get propertyId\r\n pid = parseInt(out.hex.substring(20, 20 + 8), 16);\r\n // if it is same as this wallet propertyId\r\n if (pid == this._propertyId) {\r\n // get the value\r\n value = parseInt(out.hex.substring(28, 28 + 16), 16);\r\n isOmni = true;\r\n }\r\n }\r\n });\r\n\r\n if (isDust && isOmni) {\r\n // if it's a reveive transaction\r\n if (receiverAddress == address.address) {\r\n accountInfo.balance += value;\r\n tx.omniIsReceived = true;\r\n }\r\n // if it's a send transaction\r\n else {\r\n accountInfo.balance -= value;\r\n tx.omniIsReceived = false;\r\n }\r\n tx.omniSenderAddress = tx.vin[0].addresses[0];\r\n tx.omniReceiverAddress = receiverAddress;\r\n tx.omniValue = value;\r\n accountInfo.transactions?.push(tx);\r\n }\r\n });\r\n\r\n return accountInfo;\r\n }\r\n\r\n /**\r\n * Generate a OmniLayer transaction to be signed by device\r\n * @param receivers Receiver bitcoin address\r\n * @param fromAccount Account Number\r\n * @param selectedFee The prefered fee, can be 'economy', 'normal', 'priority', check @CalculateTransactionFee function\r\n */\r\n public async GenerateTransaction(\r\n receiverAddress: string,\r\n amount: number,\r\n fromAccount = 0,\r\n selectedFee: string = 'normal'\r\n ): Promise {\r\n if (this._wallet.accounts == null) {\r\n throw new Error('There is no account in wallet, Do Wallet Discovery First');\r\n }\r\n\r\n // Validate account\r\n if (fromAccount >= this._wallet.accounts.length) {\r\n throw new Error(`Cannot fine account #${fromAccount}`);\r\n }\r\n\r\n // Validate list of receivers\r\n if (receiverAddress == undefined || receiverAddress.length == 0) {\r\n throw new Error('Receiver address can not be empty');\r\n }\r\n\r\n let acc = this._wallet.accounts[fromAccount];\r\n\r\n if (amount > acc.balance) {\r\n throw new Error('No sufficient balance in your account');\r\n }\r\n\r\n if (acc.addressModel == null) {\r\n throw new Error('Address model is undefined');\r\n }\r\n\r\n const coinInfo = super.GetCoinInfo() as OmniCoinInfoModel;\r\n\r\n // Get UTXO from BTC blockchain\r\n let addInfo = await this._bitcoinBlockchain.GetAddressInfo(acc.addressModel);\r\n\r\n MyConsole.Info('Btc address info', addInfo);\r\n\r\n if (!addInfo) {\r\n throw new Error('Cannot get BTC address info');\r\n }\r\n\r\n // update UTXO\r\n await this.UpdateAccountUtxos(acc);\r\n\r\n MyConsole.Info('OmniWallet::GenerateTransaction->sortedUtoxs:', acc.sortedUtxos);\r\n\r\n if (acc.sortedUtxos == null || acc.sortedUtxos.length == 0) {\r\n throw new Error('UTXO list is empty or undefined');\r\n }\r\n\r\n //! Get the prefered transaction fee\r\n //! For SECURITY, We must calculate the transaction fee again\r\n let fees = await this._bitcoinBlockchain.GetTxFee(true);\r\n selectedFee = selectedFee.toLowerCase();\r\n let selectedTxFee = fees.economy;\r\n if (selectedFee == 'economy' || selectedFee == 'low' || selectedFee == 'minimal' || selectedFee == 'min') {\r\n selectedTxFee = +fees.economy;\r\n } else if (\r\n selectedFee == 'priority' ||\r\n selectedFee == 'high' ||\r\n selectedFee == 'fast' ||\r\n selectedFee == 'max'\r\n ) {\r\n selectedTxFee = +fees.high;\r\n }\r\n let txLen = this.CalculateTxLen();\r\n let txFee = selectedTxFee * txLen;\r\n\r\n let selectedUtxo = acc.sortedUtxos.find((utxo) => {\r\n return +utxo.value > coinInfo.dust_limit + txFee;\r\n });\r\n\r\n if (!selectedUtxo) {\r\n throw new Error('No sufficient balance in one UTXO');\r\n }\r\n\r\n let tx: BitcoinTx = {\r\n coinName: 'Bitcoin',\r\n inputs: [],\r\n outputs: [],\r\n options: {},\r\n };\r\n\r\n // Transaction input\r\n tx.inputs.push({\r\n address_n: acc.addressModel.path,\r\n prev_hash: selectedUtxo.txid,\r\n prev_index: selectedUtxo.vout,\r\n amount: selectedUtxo.value,\r\n });\r\n\r\n //! Load previous transactions\r\n await this.LoadPrevTx(acc, tx);\r\n\r\n // first address is CHANGE which should be the same as account address\r\n tx.outputs.push({\r\n address_n: acc.addressModel.path,\r\n script_type: EnumOutputScriptType.PAYTOP2SHWITNESS,\r\n amount: (+selectedUtxo.value - txFee - coinInfo.dust_limit).toString(),\r\n });\r\n\r\n // Omni Simple send Transaction\r\n // VVVV = 2 bytes version\r\n // SSSS = 2 bytes transaction type, 0: Simple Send\r\n // COINIDEN = 4 bytes, Currency identifier, 1 = OMNI, 2 OMNI test, 3 = MAID, 31 = USDT\r\n // NUMBER_OF_COINS = 8 bytes\r\n let omniCoinId = ('00000000' + coinInfo.proparty_id.toString(16)).substr(-8);\r\n let omniAmount = ('0000000000000000' + amount.toString(16)).substr(-16);\r\n\r\n // omni VVVVSSSS COINIDEN AMOUNT\r\n let omniProto = Utility.HexStringToByteArrayNumber(`6f6d6e6900000000${omniCoinId}${omniAmount}`);\r\n\r\n tx.outputs.push({\r\n op_return_data: omniProto,\r\n amount: '0',\r\n script_type: EnumOutputScriptType.PAYTOOPRETURN,\r\n });\r\n\r\n // Receiver\r\n tx.outputs.push({\r\n address: receiverAddress,\r\n script_type: EnumOutputScriptType.PAYTOADDRESS,\r\n amount: '546', // dust\r\n });\r\n\r\n MyConsole.Info('OmniWallet::GenerateTransaction->tx to be signed:', tx);\r\n\r\n return tx;\r\n }\r\n\r\n /**\r\n * Get account UTXOss\r\n * @param acc The omni account\r\n * @returns sorted UTXOs\r\n */\r\n public async UpdateAccountUtxos(acc: WalletModel.OmniAccountInfo) {\r\n let utxos: WalletModel.BitcoinUtxoModel[] = [];\r\n if (acc.addressModel == null) {\r\n return utxos;\r\n }\r\n\r\n utxos = await this._bitcoinBlockchain.GetAddressUtxo(acc.addressModel?.address);\r\n\r\n acc.sortedUtxos = utxos.sort((a, b) => {\r\n const aValue = +a.value;\r\n const bValue = +b.value;\r\n if (aValue > bValue) {\r\n return -1;\r\n } else if (aValue == bValue) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This function will return a list of transaction of the account, this function is useful for UI\r\n * @param accountNumber Account number\r\n * @param startIndex Transaction start index\r\n * @param numberOfTransactions Number of transaction\r\n */\r\n public async GetTransactionViewList(\r\n accountNumber: number = 0,\r\n startIndex: number = 0,\r\n numberOfTransactions: number\r\n ): Promise> {\r\n if (this._wallet.accounts == null) {\r\n throw new Error('There is no account in wallet, Do Wallet Discovery First');\r\n }\r\n\r\n // Validate account\r\n if (accountNumber >= this._wallet.accounts.length) {\r\n throw new Error(`Cannot find account #${accountNumber}`);\r\n }\r\n\r\n // WE ONLY CHECK THE CURRENT ACCOUNT\r\n const account = this._wallet.accounts[accountNumber];\r\n\r\n let txViewList = Array();\r\n\r\n if (account.transactions == null || account.transactions.length == 0) {\r\n return txViewList;\r\n }\r\n\r\n // Retrive transaction list from server\r\n let listOfTransactions = account.transactions;\r\n\r\n if (account.addressModel == undefined) {\r\n throw new Error('Address Model can not be undefined');\r\n }\r\n\r\n listOfTransactions.forEach((tx) => {\r\n let tv: WalletModel.OmniTransactionView = {\r\n fromAddress: tx.omniSenderAddress ?? '',\r\n toAddress: tx.omniReceiverAddress ?? '',\r\n amount: tx.omniValue ?? 0,\r\n blockId: tx.blockHeight,\r\n hash: tx.txid,\r\n date: new Date(tx.blockTime * 1000).toLocaleString(),\r\n status: tx.omniIsReceived ? 'RECEIVED' : 'SENT',\r\n isValid: true,\r\n invalidReason: '',\r\n };\r\n\r\n txViewList.push(tv);\r\n });\r\n\r\n MyConsole.Info('OmniWallet::GetTransactionViewList->Transaction view list', txViewList);\r\n\r\n return txViewList;\r\n }\r\n\r\n /**\r\n * Validating the bitcoin address\r\n * @param address The address to be checked\r\n */\r\n public IsAddressValid(address: string): boolean {\r\n let coinInfo = this.GetCoinInfo();\r\n\r\n let symbol: string = 'bitcoin';\r\n\r\n if (coinInfo.test != undefined && coinInfo.test) {\r\n if (WAValidator.validate(address, symbol, 'testnet')) {\r\n return true;\r\n }\r\n } else {\r\n if (WAValidator.validate(address, symbol)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * To Send/Broadcast a transaction\r\n * @param txData Signed transaction to be sent to the network\r\n */\r\n public async SendTransaction(txData: string) {\r\n return this._bitcoinBlockchain.BroadCastTransaction(txData);\r\n }\r\n\r\n /**\r\n * To calculate the a transaction fee\r\n */\r\n public async CalculateTransactionFee(): Promise {\r\n let txFees = await this._bitcoinBlockchain.GetTxFee(true);\r\n\r\n // Calculate transaction length\r\n let txLen = this.CalculateTxLen();\r\n\r\n let fees: BitcoinFeeSelectionModel = {\r\n economy: (txLen * txFees.economy).toString(),\r\n normal: (txLen * txFees.normal).toString(),\r\n priority: (txLen * txFees.high).toString(),\r\n unit: 'BTC',\r\n decimal: 8,\r\n };\r\n\r\n return fees;\r\n }\r\n\r\n /**\r\n * Estimate the length of a transaction\r\n */\r\n private CalculateTxLen(): number {\r\n //! We should calculate the size of this transaction to calculate the actual fee\r\n // BTC + 1*INP + 3*OUT + DATA + OPRETURN\r\n return 10 + 148 + 3 * 180 + 16 + 10;\r\n }\r\n\r\n /**\r\n * Loading previous transaction of each input(s).\r\n * @param tx Bitcoin transaction\r\n */\r\n private async LoadPrevTx(acc: WalletModel.OmniAccountInfo, tx: BitcoinTx) {\r\n if (tx.inputs == undefined || tx.inputs.length == 0) {\r\n throw new Error('OmniWallet::LoadPrevTx->Transaction inputs cannot be null or empty');\r\n }\r\n\r\n if (\r\n acc.bitcoinAddressInfo == null ||\r\n acc.bitcoinAddressInfo.transactions == null ||\r\n acc.bitcoinAddressInfo.transactions.length == 0\r\n ) {\r\n throw new Error('OmniWallet::No Bitcoin Address info or empty transaction');\r\n }\r\n\r\n tx.refTxs = new Array();\r\n tx.inputs.forEach((txInput) => {\r\n let prev = acc.bitcoinAddressInfo?.transactions?.find((t) => t.txid == txInput.prev_hash);\r\n if (prev == null) {\r\n throw new Error('OmniWallet::LoadPrevTx->No transaction found for this UTXO');\r\n }\r\n\r\n let ref: RefTransaction = {\r\n hash: prev.txid,\r\n version: prev.version,\r\n lock_time: prev.lockTime ?? 0,\r\n bin_outputs: [],\r\n inputs: [],\r\n };\r\n\r\n prev.vin.forEach((inp) => {\r\n if (inp.txid == null) {\r\n throw new Error('OmniWallet::LoadPrevTx->PrevTransation id is null');\r\n }\r\n\r\n ref.inputs.push({\r\n prev_hash: inp.txid,\r\n prev_index: inp.vout ?? 0,\r\n sequence: inp.sequence,\r\n script_sig: inp.hex ?? '',\r\n });\r\n });\r\n\r\n prev.vout.forEach((out) => {\r\n if (out.hex == null) {\r\n throw new Error('OmniWallet::LoadPrevTx->PrevTransation hex is null');\r\n }\r\n ref.bin_outputs.push({\r\n amount: out.value,\r\n script_pubkey: out.hex,\r\n });\r\n });\r\n\r\n if (tx.refTxs) {\r\n tx.refTxs.push(ref);\r\n }\r\n });\r\n }\r\n}\r\n","/*\r\n * This is part of PROKEY HARDWARE WALLET project\r\n * Copyright (C) Prokey.io\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * (at your option) any later version.\r\n\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU General Public License for more details.\r\n\r\n * You should have received a copy of the GNU General Public License\r\n * along with this program. If not, see .\r\n*/\r\n\r\nimport { CoinBaseType } from '../coins/CoinInfo';\r\nimport { Device } from '../device/Device';\r\nimport { RippleCoinInfoModel } from '../models/CoinInfoModel';\r\nimport { BaseWallet } from './BaseWallet';\r\nimport * as PathUtil from '../utils/pathUtils';\r\nimport { AddressModel, RippleAddress, RippleSignedTx, RippleTransaction } from '../models/Prokey';\r\nimport { RippleBlockchain } from '../blockchain/RippleBlockchain';\r\nimport * as WalletModel from '../models/RippleWalletModel';\r\nimport * as Utils from '../utils/utils';\r\n\r\nvar WAValidator = require('multicoin-address-validator');\r\n\r\nexport class RippleWallet extends BaseWallet {\r\n // _block_chain : ProkeyRippleBlockchain;\r\n _rippleBlockchain: RippleBlockchain;\r\n _rippleWallet: WalletModel.RippleWalletModel;\r\n\r\n constructor(device: Device, coinName: string) {\r\n super(device, coinName, CoinBaseType.Ripple);\r\n\r\n this._rippleBlockchain = new RippleBlockchain(super.GetCoinInfo());\r\n this._rippleWallet = {\r\n totalBalance: 0,\r\n accounts: new Array(),\r\n };\r\n }\r\n\r\n /**\r\n * Start searching blockchain to discovery(find) the wallet\r\n * @param accountFindCallBack is an optional callback function, this function will be called when an account discovered\r\n * @returns RippleWallet with all accounts\r\n */\r\n public async StartDiscovery(\r\n accountFindCallBack?: (accountInfo: WalletModel.RippleAccountInfo) => void\r\n ): Promise {\r\n return new Promise(async (resolve, reject) => {\r\n let an = 0;\r\n this._rippleWallet.accounts = new Array();\r\n do {\r\n //! Get account n info\r\n let account = await this.GetAccountInfo(an);\r\n\r\n //! If Account is not founded\r\n if (account.isAccountFounded == false) {\r\n //! If there is no account in the wallet, a default account(first account) will be added\r\n if (this._rippleWallet.accounts.length == 0) {\r\n let emptyAccount: WalletModel.RippleAccountInfo = {\r\n Balance: '0',\r\n Account: account.addressModel.address,\r\n OwnerCount: 0,\r\n PreviousTxnId: '',\r\n PreviousTxnLgrSeq: 0,\r\n Sequence: 0,\r\n TickSize: 0,\r\n TransferRate: 0,\r\n LedgerEntryType: '',\r\n Flags: 0,\r\n\r\n isAccountFounded: false,\r\n addressModel: account.addressModel,\r\n };\r\n\r\n if (accountFindCallBack) {\r\n accountFindCallBack(emptyAccount);\r\n }\r\n this._rippleWallet.accounts.push(emptyAccount);\r\n }\r\n // there is nothing here\r\n return resolve(this._rippleWallet);\r\n } else {\r\n this._rippleWallet.accounts.push(account);\r\n this._rippleWallet.totalBalance += +account.Balance!;\r\n if (accountFindCallBack) {\r\n accountFindCallBack(account);\r\n }\r\n an++;\r\n }\r\n } while (true);\r\n });\r\n }\r\n\r\n /**\r\n * Get account's transaction from blockchain\r\n * @param account\r\n * @returns\r\n */\r\n public async GetAccountTransactions(accountNumber: number): Promise> {\r\n if (this._rippleWallet.accounts == null) {\r\n throw new Error('There is no account in wallet, Do Wallet Discovery First');\r\n }\r\n\r\n // Validate account\r\n if (accountNumber >= this._rippleWallet.accounts.length) {\r\n throw new Error(`Cannot fine account #${accountNumber}`);\r\n }\r\n\r\n let accountAddress = this._rippleWallet.accounts[accountNumber].Account;\r\n\r\n return await this._rippleBlockchain.GetAccountTransactions(accountAddress);\r\n }\r\n\r\n public async GetCurrentFee(): Promise {\r\n return await this._rippleBlockchain.GetFee();\r\n }\r\n\r\n public GenerateTransaction(\r\n toAccount: string,\r\n amount: number,\r\n accountNumber: number,\r\n selectedFee: string,\r\n destinationTag?: number\r\n ): RippleTransaction {\r\n // Validate accountNumber\r\n if (accountNumber >= this._rippleWallet.accounts!.length) {\r\n throw new Error('Account number is wrong');\r\n }\r\n\r\n // Check balance\r\n let bal = 0;\r\n var acc = this._rippleWallet.accounts![accountNumber];\r\n if (acc != null && acc.Balance != null) {\r\n bal = +acc.Balance;\r\n }\r\n\r\n let ci = super.GetCoinInfo() as RippleCoinInfoModel;\r\n\r\n bal =\r\n bal -\r\n ci.min_balance - // 20 XRP for reserve\r\n amount -\r\n +selectedFee;\r\n if (bal < 0) throw new Error('Insufficient balance you need to hold 20 XRP in your account.');\r\n\r\n let path = PathUtil.GetBipPath(CoinBaseType.Ripple, accountNumber, ci);\r\n\r\n let tx: RippleTransaction = {\r\n address_n: path.path,\r\n fee: +selectedFee,\r\n sequence: this._rippleWallet.accounts![accountNumber].Sequence,\r\n payment: {\r\n amount: amount,\r\n destination: toAccount,\r\n },\r\n };\r\n if (destinationTag) {\r\n tx.payment.destination_tag = destinationTag;\r\n }\r\n return tx;\r\n }\r\n\r\n public async SendTransaction(tx: RippleSignedTx): Promise {\r\n let data = tx.serialized_tx as any;\r\n if (data instanceof Uint8Array) {\r\n data = Utils.ByteArrayToHexString(data).toUpperCase();\r\n }\r\n return await this._rippleBlockchain.BroadCastTransaction(data);\r\n }\r\n\r\n /**\r\n * Validate if this is a valid Ripple address\r\n * @param address The address to be checked\r\n */\r\n public IsAddressValid(address: string): boolean {\r\n return WAValidator.validate(address, 'xrp');\r\n }\r\n\r\n // Get ripple account info from blockchain\r\n private async GetAccountInfo(accountNumber: number): Promise {\r\n let path = PathUtil.GetBipPath(CoinBaseType.Ripple, accountNumber, super.GetCoinInfo());\r\n\r\n let address = await this.GetAddress(path.path, false);\r\n\r\n //! Save address\r\n\r\n //! Getting address(account) info. from blockchain\r\n let reqAdd: AddressModel = { address: address.address, path: path.path };\r\n let addressInfo = await this._rippleBlockchain.GetAddressInfo(reqAdd);\r\n\r\n //! Add AddressModel\r\n if (addressInfo != null) {\r\n addressInfo.addressModel = path;\r\n }\r\n\r\n return addressInfo;\r\n }\r\n}\r\n","import {environment} from \"../../environments/environment\";\r\n\r\n/** All REST urls should be put here and all services should use this class to get their desired REST url. */\r\nexport class RestUrls {\r\n static readonly baseURL = environment.baseURL;\r\n\r\n /** url for getting latest device firmware. */\r\n static getBootloaderLatestFirmware(): string {\r\n return this.baseURL + \"api/bootloader/getLatestFirmware\";\r\n }\r\n\r\n /** url for getting the device firmware's signatures */\r\n static getOptimumFirmwareSignatures(): string {\r\n return this.baseURL + \"api/bootloader/getOptimumFirmwareSignatures\";\r\n }\r\n\r\n /** url for setting server challenge. */\r\n static getServerChallenge(): string {\r\n return this.baseURL + 'api/challenges/challenge';\r\n }\r\n\r\n /** url for checking if this is the latest version of device firmware */\r\n static getBootloaderOptimumVersion(version: string): string {\r\n return this.baseURL + \"api/bootloader/isOptimumLatestVersion?version=\" + version;\r\n }\r\n\r\n /** url for add authentication headers to exchange http request */\r\n static getExchangeAuth(): string {\r\n return this.baseURL + \"api/exchange/auth\"\r\n }\r\n}\r\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { LayoutMode } from '@core/models/layout-mode';\r\nimport { LayoutService } from '@core/services/layout.service';\r\nimport {GoogleOath2ProviderService} from \"@core/services/oauth2/google-oath2-provider.service\";\r\nimport {GoogleStorageRepositoryService} from \"@core/services/storage/repository/google-drive/google-storage-repository.service\";\r\nimport { TourService } from 'ngx-ui-tour-md-menu';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppComponent implements OnInit {\r\n title = 'app';\r\n tourService: TourService;\r\n\r\n constructor(\r\n private _router: Router,\r\n private _layoutService: LayoutService,\r\n private _tourService: TourService,\r\n private _googleOath2ProviderService: GoogleOath2ProviderService) {\r\n this.tourService = _tourService;\r\n }\r\n\r\n ngOnInit() {\r\n this._onRouteChange();\r\n this._googleOath2ProviderService.fetchToken();\r\n }\r\n\r\n private _onRouteChange(): void {\r\n this._router.events.subscribe((event) => {\r\n if (event instanceof NavigationEnd) {\r\n if (event.url?.includes('exchange-receive') || event.url?.includes('exchange-status')) {\r\n this._layoutService.Layout = LayoutMode.Exchange;\r\n } else if (event.url?.includes('portfolio')) {\r\n this._layoutService.Layout = LayoutMode.Portfolio;\r\n } else {\r\n this._layoutService.Layout = LayoutMode.Default;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","\r\n\r\n","import {BrowserModule} from '@angular/platform-browser';\r\nimport {NgModule} from '@angular/core';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {HttpClientModule} from '@angular/common/http';\r\nimport {RouterModule} from '@angular/router';\r\nimport {NgxPaginationModule} from 'ngx-pagination';\r\nimport {TourMatMenuModule} from 'ngx-ui-tour-md-menu';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {MatCardModule} from '@angular/material/card';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport {AppComponent} from './app.component';\r\nimport {CoreModule} from './core/core.module';\r\nimport {SharedModule} from './shared/shared.module';\r\nimport {WalletModule} from './wallet/wallet.module';\r\nimport {StartComponent} from './start/start.component';\r\nimport {PageNotFoundComponent} from './page-not-found/page-not-found.component';\r\nimport {CurrencyPipe, DecimalPipe} from '@angular/common';\r\nimport {WelcomeComponent} from './welcome/welcome.component';\r\nimport {BrowserAnimationsModule} from '@angular/platform-browser/animations';\r\nimport {OAuthModule, OAuthStorage} from \"angular-oauth2-oidc\";\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n StartComponent,\r\n PageNotFoundComponent,\r\n WelcomeComponent,\r\n ],\r\n imports: [\r\n BrowserModule.withServerTransition({appId: 'ng-cli-universal'}),\r\n HttpClientModule,\r\n FormsModule,\r\n NgxPaginationModule,\r\n CoreModule,\r\n WalletModule,\r\n BrowserAnimationsModule,\r\n MatMenuModule,\r\n MatCardModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n TourMatMenuModule.forRoot(),\r\n SharedModule.forRoot(),\r\n RouterModule.forRoot([\r\n {path: 'firmware', loadChildren: () => import('app/bootloader/bootloader.module').then(m => m.BootloaderModule)},\r\n {path: 'start', component: StartComponent},\r\n {path: 'welcome', component: WelcomeComponent},\r\n {path: '', component: StartComponent, pathMatch: 'full'},\r\n {path: '**', component: PageNotFoundComponent},\r\n ], {relativeLinkResolution: 'legacy'}),\r\n ReactiveFormsModule,\r\n OAuthModule.forRoot()\r\n ],\r\n providers: [\r\n CurrencyPipe,\r\n DecimalPipe,\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule {\r\n}\r\n","import {Component} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-header',\r\n templateUrl: './app-header.component.html'\r\n})\r\nexport class AppHeaderComponent {\r\n\r\n}\r\n","
\r\n \r\n
\r\n","\r\n
\r\n \r\n
\r\n {{exchange.senderCoin.coinInfo.name}} ({{exchange.senderCoin.coinInfo.shortcut}})\r\n Account #{{currentAccount.id + 1}}\r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n Exchange\r\n {{exchange.sendAmount}} {{exchange.senderCoin.coinInfo.shortcut}}\r\n
  • \r\n
  • \r\n For\r\n {{exchange.receiveCoinAmount}} {{exchange.receiverCoin.coinInfo.shortcut}}\r\n
  • \r\n
  • \r\n Provider\r\n \r\n \r\n \r\n \r\n {{exchange.providerName}}\r\n \r\n
  • \r\n
\r\n
\r\n Since you have chosen standard rate offer, rate is depends on the market fluctuations. therefore, you might receive more or less than you thought you would.\r\n
\r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {Exchange} from '../../../wallet/device/exchange/models/exchange';\r\nimport {ExchangeService} from '../../../wallet/device/exchange/services/exchange.service';\r\nimport {WalletService} from '../../services/wallet.service';\r\nimport {Subscription} from 'rxjs';\r\nimport {AccountInfo} from '../../models/connect/account-info';\r\nimport {Router} from '@angular/router';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\n\r\n@Component({\r\n selector: 'app-exchange-layout',\r\n templateUrl: './exchange-layout.component.html',\r\n styleUrls: ['./exchange-layout.component.css']\r\n})\r\nexport class ExchangeLayoutComponent implements OnInit {\r\n accountSubscription: Subscription;\r\n exchange: Exchange;\r\n currentAccount: AccountInfo = {};\r\n\r\n constructor(\r\n private _walletService: WalletService,\r\n private _deviceService: WalletDeviceService,\r\n private exchangeService: ExchangeService,\r\n private route: Router\r\n ) {\r\n }\r\n\r\n async ngOnInit() {\r\n if (!this._deviceService.isInitial()) {\r\n this.route.navigate(['/wallet/device']);\r\n }\r\n this.exchangeSubscribe();\r\n this.subscribeAccount();\r\n }\r\n\r\n private async exchangeSubscribe() {\r\n this.exchangeService.currentOffer.subscribe(async exchange => {\r\n this.exchange = exchange;\r\n });\r\n }\r\n\r\n subscribeAccount() {\r\n this.accountSubscription = this._walletService.onCurrentAccountChange.subscribe(currentAccount => {\r\n this.currentAccount = currentAccount;\r\n });\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\n\r\ndeclare var $: any;\r\n\r\n@Component({\r\n selector: 'app-spinner-loading',\r\n templateUrl: './spinner-loading.component.html',\r\n styleUrls: ['./spinner-loading.component.css']\r\n})\r\nexport class SpinnerLoadingComponent {\r\n @Input() set showSpinner(value: boolean) {\r\n if (value === true) {\r\n this.loadSpinner();\r\n } else {\r\n this.hideSpinner();\r\n }\r\n }\r\n\r\n loadSpinner() {\r\n $('#loading').remove();\r\n $('body').append('' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n 'LOADING' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
');\r\n $('.acc-balance').hide();\r\n }\r\n\r\n hideSpinner() {\r\n $('#loading').fadeOut(500);\r\n setTimeout(function () {\r\n $('#loading').remove();\r\n }, 1000);\r\n $('.syncing').remove();\r\n $('ul.home-links li:nth-child(3) a').show();\r\n $('.acc-balance').show();\r\n }\r\n}\r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {WalletService} from '../../services/wallet.service';\r\nimport {Subject, Subscription} from 'rxjs';\r\nimport {CoinModel} from '@core/models/connect/coin-model';\r\nimport {debounceTime} from \"rxjs/operators\";\r\nimport {Erc20BaseCoinInfoModel} from \"@webcore/models/CoinInfoModel\";\r\nimport {ProkeySettingsService} from \"../../services/prokey-settings.service\";\r\nimport {ProkeySettingsKey} from \"@core/models/prokey-settings-key.enum\";\r\nimport {DialogService} from \"@shared/dialog/_services/dialog.service\";\r\nimport { LayoutService } from '@core/services/layout.service';\r\nimport { LayoutMode } from '@core/models/layout-mode';\r\n\r\n@Component({\r\n selector: 'app-wallet-add-coin',\r\n templateUrl: './wallet-add-coin.component.html',\r\n styleUrls: ['./wallet-add-coin.component.css']\r\n})\r\nexport class WalletAddCoinComponent implements OnInit, OnDestroy {\r\n\r\n status: ModalStatus = ModalStatus.ADD_NEW_COIN;\r\n otherCoinSubscription: Subscription;\r\n coins: CoinModel[] = [];\r\n myFamousCoins: string[] = [];\r\n myAssetCoins: string[] = [];\r\n searchSubject: Subject = new Subject();\r\n searchCoins: Array;\r\n searchText: string;\r\n\r\n constructor(private walletService: WalletService,\r\n private _prokeySettingsService: ProkeySettingsService,\r\n private _layoutService: LayoutService,\r\n private _dialogService: DialogService) {\r\n }\r\n\r\n ngOnInit() {\r\n\r\n if (this._layoutService.Layout === LayoutMode.Portfolio) {\r\n this.status = ModalStatus.ADD_ASSET_COIN;\r\n }\r\n\r\n switch (this.status) {\r\n case ModalStatus.ADD_NEW_COIN:\r\n this._initNewCoinStatus();\r\n break;\r\n case ModalStatus.ADD_ASSET_COIN:\r\n this._initAssetCoinStatus();\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this.searchSubject.pipe(debounceTime(500)).subscribe(searchValue => {\r\n if (searchValue) {\r\n this.searchCoins = this.coins.filter(\r\n coin => coin.coinInfo.shortcut.toLowerCase().startsWith(searchValue.toLowerCase()) ||\r\n coin.coinInfo.name.toLowerCase().startsWith(searchValue.toLowerCase())\r\n );\r\n } else {\r\n this.searchCoins = undefined;\r\n }\r\n });\r\n }\r\n\r\n subscribeOtherCoins() {\r\n this.otherCoinSubscription = this.walletService.WalletCoins.onOtherCoinsChange.subscribe(coins => {\r\n coins.forEach(coin => this.coins.push(coin));\r\n\r\n this.coins.forEach(coin => {\r\n coin.isSelected = this.myFamousCoins?.includes(coin.coinInfo.id) ?? false;\r\n });\r\n });\r\n }\r\n\r\n apply() {\r\n const selectedCoins = this.coins.filter(c => c.isSelected === true);\r\n const myCoins = selectedCoins.length > 0 ? selectedCoins.map(c => c.coinInfo.id) : [];\r\n\r\n switch (this.status) {\r\n case ModalStatus.ADD_NEW_COIN:\r\n this._addToWallet(myCoins);\r\n break;\r\n case ModalStatus.ADD_ASSET_COIN:\r\n this._addToAsset(myCoins);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this._dialogService.closeAll();\r\n }\r\n\r\n private _initNewCoinStatus() {\r\n this.myFamousCoins = this._prokeySettingsService.get(ProkeySettingsKey.FAMOUS_COINS);\r\n this.subscribeOtherCoins();\r\n }\r\n\r\n private _initAssetCoinStatus() {\r\n this.myAssetCoins = this._prokeySettingsService.get(ProkeySettingsKey.ASSET_COINS);\r\n this.coins = this.walletService.WalletCoins.getCoins();\r\n this.coins.forEach(coin => {\r\n coin.isSelected = this.myAssetCoins?.includes(coin.coinInfo.id) ?? false;\r\n });\r\n }\r\n\r\n private _addToWallet(myCoins: string[]) {\r\n this._prokeySettingsService.save(ProkeySettingsKey.FAMOUS_COINS, myCoins);\r\n this.walletService.changeMyFamousCoinsSource();\r\n }\r\n\r\n private _addToAsset(myCoins: string[]) {\r\n this._prokeySettingsService.save(ProkeySettingsKey.ASSET_COINS, myCoins);\r\n this._syncAssetToFamousCoin(myCoins);\r\n this.walletService.WalletCoins.changeAssetCoinsSource();\r\n }\r\n\r\n private _syncAssetToFamousCoin(assetCoins: string[]) {\r\n let fmCoins : string[] = this._prokeySettingsService.get(ProkeySettingsKey.FAMOUS_COINS);\r\n if (fmCoins == undefined) {\r\n fmCoins = [];\r\n }\r\n \r\n assetCoins.forEach(asset => {\r\n if (!fmCoins?.includes(asset)) {\r\n fmCoins.push(asset);\r\n }\r\n });\r\n\r\n this._addToWallet(fmCoins); \r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.otherCoinSubscription) {\r\n this.otherCoinSubscription.unsubscribe();\r\n }\r\n\r\n this.searchCoins = undefined;\r\n this.searchText = undefined;\r\n }\r\n\r\n addCustomToken() {\r\n this.status = ModalStatus.ADD_CUSTOM_TOKEN;\r\n }\r\n\r\n onSearchKeyUp() {\r\n this.searchSubject.next(this.searchText);\r\n }\r\n\r\n isSearchHasNotResult() {\r\n return this.searchCoins && this.searchCoins.length === 0;\r\n }\r\n\r\n close() {\r\n this._dialogService.closeAll();\r\n this.searchCoins = undefined;\r\n this.searchText = undefined;\r\n this.status = ModalStatus.ADD_NEW_COIN;\r\n }\r\n\r\n async addCustomTokenEvent(coin: Erc20BaseCoinInfoModel) {\r\n const addedCoinModel = new CoinModel(coin);\r\n this.walletService.WalletCoins.addOtherCoins([addedCoinModel], true);\r\n const selectedCoins = this.coins.filter(c => c.isSelected === true);\r\n const myCoins = selectedCoins.map(c => c.coinInfo.id);\r\n myCoins.push(addedCoinModel.coinInfo.id);\r\n this._prokeySettingsService.save(ProkeySettingsKey.FAMOUS_COINS, myCoins);\r\n this.walletService.changeMyFamousCoinsSource();\r\n this.close();\r\n }\r\n}\r\n\r\n\r\nenum ModalStatus {\r\n ADD_NEW_COIN,\r\n ADD_CUSTOM_TOKEN,\r\n ADD_ASSET_COIN,\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
Can't find the specific token? You may add your custom token.
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n","import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\r\nimport {NgForm} from '@angular/forms';\r\nimport {NetworkModel} from '@core/models/network-model';\r\nimport {CustomTokenService} from '../../../services/custom-token.service';\r\nimport {Erc20BaseCoinInfoModel} from '@webcore/models/CoinInfoModel';\r\nimport {CoinModel} from '@core/models/connect/coin-model';\r\nimport {IsAddressValid} from '@webcore/utils/address';\r\nimport {CoinBaseType} from '@webcore/coins/CoinInfo';\r\n\r\n@Component({\r\n selector: 'app-wallet-add-custom-token',\r\n templateUrl: './wallet-add-custom-token.component.html',\r\n styleUrls: ['./wallet-add-custom-token.component.css']\r\n})\r\nexport class WalletAddCustomTokenComponent implements OnInit {\r\n @Output() _cancelEvent = new EventEmitter();\r\n @Output() _addedCustomTokenEvent = new EventEmitter();\r\n @Input() _websiteCoinModels: CoinModel[];\r\n @ViewChild('addCustomTokenForm') public addCustomTokenForm: NgForm;\r\n networks: Array;\r\n\r\n selectedNetwork: string;\r\n name: string;\r\n contractAddress: string;\r\n contractDecimal: string;\r\n contractSymbol: string;\r\n\r\n addressValidationFlag = true;\r\n networkValidationFlag = true;\r\n contractAddressRepeatedValidationFlag = true;\r\n contractSymbolRepeatedValidationFlag = true;\r\n\r\n repeatedCoinContractAddress: string;\r\n repeatedCoinSymbol: string;\r\n\r\n constructor(\r\n private customTokenService: CustomTokenService\r\n ) { }\r\n\r\n async ngOnInit() {\r\n this.networks = await this.customTokenService.getAvailableNetworks();\r\n }\r\n\r\n cancel() {\r\n this._cancelEvent.emit(true);\r\n }\r\n\r\n async addToken() {\r\n // this method just work with erc20 coins\r\n if (!this.addCustomTokenForm.valid) {\r\n return;\r\n }\r\n const contractNetwork = this.networks.find(network => network.name === this.selectedNetwork);\r\n if (!this.selectedNetwork) {\r\n this.networkValidationFlag = false;\r\n return;\r\n }\r\n if (!IsAddressValid(this.contractAddress, contractNetwork.type, contractNetwork.isTest ? 'tETH' : 'ETH', contractNetwork.isTest)) {\r\n this.addressValidationFlag = false;\r\n return;\r\n }\r\n if (this._websiteCoinModels.some(coin => this.validateContractAddressAndSymbol(coin))) {\r\n return;\r\n }\r\n const customToken = await this.customTokenService.addCustomToken({\r\n network: contractNetwork,\r\n tokenName: this.name.trim(),\r\n contractAddress: this.contractAddress.trim(),\r\n decimal: +this.contractDecimal,\r\n symbol: this.contractSymbol.trim()\r\n });\r\n this._addedCustomTokenEvent.emit(customToken);\r\n }\r\n\r\n private validateContractAddressAndSymbol(coin: CoinModel) {\r\n if (coin.coinInfo.coinBaseType === CoinBaseType.ERC20) {\r\n const erc20Coin = coin.coinInfo as Erc20BaseCoinInfoModel;\r\n if (erc20Coin.address === this.contractAddress) {\r\n this.contractAddressRepeatedValidationFlag = false;\r\n this.repeatedCoinContractAddress = coin.coinInfo.name;\r\n return true;\r\n }\r\n }\r\n if (coin.coinInfo.shortcut === this.contractSymbol) {\r\n this.contractSymbolRepeatedValidationFlag = false;\r\n this.repeatedCoinSymbol = coin.coinInfo.name;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n changeNetwork(network: string) {\r\n this.selectedNetwork = network;\r\n this.networkValidationFlag = true;\r\n }\r\n\r\n changeContractAddress() {\r\n this.addressValidationFlag = true;\r\n this.contractAddressRepeatedValidationFlag = true;\r\n }\r\n}\r\n","

Add A Custom Token

\r\n
\r\n Please note that your custom token will be shown as \"Unknown\" asset on your device because it doesn't exist on\r\n the firmware,\r\n however, you can send, receive and manage the token with your Prokey.\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n Network is required\r\n
\r\n
\r\n\r\n
\r\n
Token Name
\r\n \r\n
\r\n \r\n
\r\n Token name is required\r\n
\r\n
\r\n\r\n
\r\n
Contract Address\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n Contract Address is required\r\n
\r\n
\r\n \r\n Invalid Contract Address\r\n
\r\n
\r\n \r\n contract address already existed as {{repeatedCoinContractAddress}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
Decimal\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n Decimal is required\r\n
\r\n
\r\n Decimal is not valid\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
Symbol
\r\n \r\n
\r\n \r\n
\r\n Symbol name is required\r\n
\r\n
\r\n \r\n symbol already existed as {{repeatedCoinSymbol}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {Subscription, timer} from 'rxjs';\r\nimport {Router} from '@angular/router';\r\n\r\nimport {Helpers} from '../../services/helpers';\r\n\r\nimport {DeviceMode} from '@core/models/connect/device-mode.enum';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\n\r\n@Component({\r\n selector: 'app-wallet-device-info',\r\n templateUrl: './wallet-device-info.component.html',\r\n styleUrls: ['./wallet-device-info.component.css']\r\n})\r\nexport class WalletDeviceInfoComponent implements OnInit, OnDestroy {\r\n\r\n deviceSubscription: Subscription;\r\n isConnected: boolean = false;\r\n label: string = '';\r\n\r\n constructor(private router: Router, private _deviceService: WalletDeviceService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.deviceSubscribe();\r\n }\r\n\r\n deviceSubscribe() {\r\n this.deviceSubscription = this._deviceService.device$.subscribe(device => {\r\n if (device.label !== undefined && device.label !== null && device.label.trim() !== '') {\r\n this.label = device.label;\r\n }\r\n if (device.isConnected === true) {\r\n this.isConnected = true;\r\n } else if (device.isConnected === false) {\r\n this.isConnected = false;\r\n } else if (device.mode === DeviceMode.Normal && this.isConnected == false) {\r\n this.isConnected = true;\r\n }\r\n\r\n if (device.mode === DeviceMode.Initialize) {\r\n let walletTimer = timer(5000);\r\n walletTimer.subscribe(() => {\r\n Helpers.hideModals();\r\n this.router.navigate(['/welcome']);\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.deviceSubscription.unsubscribe();\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n

{{label}}


\r\n \r\n \r\n Connected Device\r\n \r\n \r\n Disconnected Device\r\n \r\n
\r\n","import {Component} from '@angular/core';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\nimport {DialogService} from \"@shared/dialog/_services/dialog.service\";\r\n\r\n\r\n@Component({\r\n selector: 'app-wallet-device-reboot',\r\n templateUrl: './wallet-device-reboot.component.html',\r\n styleUrls: ['./wallet-device-reboot.component.css']\r\n})\r\nexport class WalletDeviceRebootComponent {\r\n constructor(private _deviceService: WalletDeviceService, private _dialogService: DialogService) {\r\n }\r\n\r\n btnReboot_OnClick() {\r\n this._dialogService.closeAll();\r\n this._deviceService.RebootDevice();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
Device must be restarted
\r\n
\r\n
\r\n

Session has expired and your prokey device must be restarted. By pressing the below button device will be restarted automatically and the wallet will be reloaded.

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-wallet-footer',\r\n templateUrl: './wallet-footer-layout.component.html'\r\n})\r\nexport class WalletFooterLayoutComponent implements OnInit {\r\n\r\n nowYear: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n this.nowYear = new Date().getFullYear();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n Follow us in Social Networks\r\n
    \r\n
  • \r\n
  • \r\n
  • \r\n
\r\n
\r\n
\r\n V2.0.0 Prokey © {{nowYear}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import {Component, Inject, OnInit, Optional} from '@angular/core';\r\nimport {timer} from 'rxjs';\r\nimport {finalize, take} from 'rxjs/operators';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\nimport {MAT_DIALOG_DATA} from \"@angular/material/dialog\";\r\nimport {LocalStorageService} from \"@core/services/storage/repository/local-storage-service\";\r\n\r\n/* this component is responsible for displaying wallet-forget-device dialog. */\r\n@Component({\r\n selector: 'app-wallet-forget-device',\r\n templateUrl: './wallet-forget-device.component.html',\r\n styleUrls: ['./wallet-forget-device.component.css']\r\n})\r\nexport class WalletForgetDeviceComponent implements OnInit {\r\n\r\n constructor(private _deviceService: WalletDeviceService,\r\n private _localStorageService: LocalStorageService,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n\r\n /* timer countdown value. */\r\n timerValue: number = 10;\r\n\r\n /* on component initialize. */\r\n ngOnInit() {\r\n this._startTimer();\r\n }\r\n\r\n /* on forget device handle. */\r\n forget() {\r\n this._localStorageService.deleteAll();\r\n this._deviceService.handleDisconnectedDevice(true);\r\n }\r\n\r\n /* on remember device handle. */\r\n remember() {\r\n this._deviceService.handleDisconnectedDevice(true);\r\n }\r\n\r\n /* start timer */\r\n private _startTimer(): void {\r\n let logoutTimer = timer(1000, 1000).pipe(take(10), finalize(() => {\r\n this.remember();\r\n }));\r\n logoutTimer.subscribe(() => {\r\n this.timerValue--;\r\n });\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n Forget \"{{data?.deviceLabel}}\"?\r\n
\r\n

\r\n Would you like Prokey Wallet to forget your device, or to remember it?\r\n

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {WalletService} from '../../services/wallet.service';\r\nimport {CoinModel} from '@core/models/connect/coin-model';\r\nimport {Subscription} from 'rxjs';\r\nimport {UiEvent} from '@core/models/connect/ui-event.enum';\r\nimport {Helpers} from '../../services/helpers';\r\nimport {WindowService} from '../../services/window.service';\r\nimport {CoinBaseType, CoinInfo} from '@webcore/coins/CoinInfo';\r\nimport {WalletAddCoinComponent} from \"../wallet-add-coin/wallet-add-coin.component\";\r\n\r\nimport {ProkeySettingsService} from \"../../services/prokey-settings.service\";\r\nimport {ProkeySettingsKey} from \"@core/models/prokey-settings-key.enum\";\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\nimport {DialogService} from \"@shared/dialog/_services/dialog.service\";\r\nimport { Router } from '@angular/router';\r\nimport { LayoutMode } from '@core/models/layout-mode';\r\nimport { LayoutService } from '@core/services/layout.service';\r\nimport {StorageService} from \"@core/services/storage/storage.service\";\r\nimport {BaseRepository} from \"@core/services/storage/repository/base-repository\";\r\nimport {first} from \"rxjs/operators\";\r\n\r\nenum SyncMode {\r\n Synchronized = 'Synchronized',\r\n Synchronizing = 'Synchronizing',\r\n Disconnected = 'Disconnected',\r\n}\r\n\r\n@Component({\r\n selector: 'app-wallet-header',\r\n templateUrl: './wallet-header-layout.component.html'\r\n})\r\nexport class WalletHeaderLayoutComponent implements OnInit, OnDestroy {\r\n\r\n isInitialWallet: boolean = false;\r\n headerMode: LayoutMode;\r\n syncMode: SyncMode = SyncMode.Synchronizing;\r\n storageImagePath: string = '';\r\n storageRepresentName: string = '';\r\n\r\n coins: CoinModel[];\r\n selectedCoin: CoinModel;\r\n\r\n myFamousCoinsSubscription: Subscription;\r\n uiAlertSubscription: Subscription;\r\n selectedCoinSubscription: Subscription;\r\n changeLayoutSubscription: Subscription;\r\n\r\n private _currentRoute = '/wallet/device';\r\n private _currentRepository: BaseRepository;\r\n\r\n constructor(private _deviceService: WalletDeviceService,\r\n private _walletService: WalletService,\r\n private _layoutService: LayoutService,\r\n private windowService: WindowService,\r\n private _prokeySettingsService: ProkeySettingsService,\r\n private _dialogService: DialogService,\r\n private _route: Router,\r\n private _storageService: StorageService) {\r\n }\r\n\r\n async ngOnInit() {\r\n this._changeLayoutSubscribe();\r\n this.initialWallet();\r\n this.myFamousCoinsSubscribe();\r\n this.uiAlertSubscribe();\r\n this.selectedCoinSubscribe();\r\n await this._setStorage();\r\n }\r\n\r\n private async _setStorage() {\r\n let device = await this._deviceService.device$.pipe(first()).toPromise();\r\n this._currentRepository = this._storageService.getCurrentStorage(device.features.device_id);\r\n this.storageImagePath = this._currentRepository.getRepositoryImagePath();\r\n this.storageRepresentName = this._currentRepository.getRepositoryRepresentName();\r\n }\r\n\r\n async initialWallet() {\r\n if (this.isInitialWallet) {\r\n return;\r\n }\r\n\r\n if (this._walletService.WalletCoins.count > 0) {\r\n this.setCoins();\r\n this.selectedCoin = this._walletService.WalletCoins.defaultCoin;\r\n this.isInitialWallet = true;\r\n } else {\r\n this.isInitialWallet = false;\r\n console.warn('initial wallet failed: no any coin available');\r\n this.windowService.nativeWindow.location.href = '/start';\r\n }\r\n }\r\n\r\n get SelectedCoinIsToken(): boolean {\r\n if (this.selectedCoin == null || this.selectedCoin.coinInfo == null) {\r\n return false;\r\n }\r\n \r\n return this.selectedCoin.coinInfo.coinBaseType == CoinBaseType.ERC20 || this.selectedCoin.coinInfo.coinBaseType == CoinBaseType.OMNI;\r\n }\r\n\r\n IsThisCoinDuplicated(coinName: string): boolean {\r\n let numberOfRepeated = 0;\r\n for(let i=0; i 1);\r\n }\r\n\r\n /**\r\n * This function is called from view when user selects a coin from drop-down list\r\n * @param coin Selected Coin\r\n */\r\n async coinsDropDownItem_OnClick(coin: CoinModel) {\r\n Helpers.WalletLoading(true);\r\n this._deviceService.setUiAlertSource(UiEvent.Blockchain_Synchronizing);\r\n const changeResult = await this._walletService.changeCurrentWallet(coin);\r\n if (changeResult) {\r\n this.selectedCoin = coin;\r\n }\r\n }\r\n\r\n setCoins() {\r\n //! Load selected coins from local storage\r\n let myFamousCoins = this._prokeySettingsService.get(ProkeySettingsKey.FAMOUS_COINS);\r\n this.coins = this._walletService.WalletCoins.getMyCoins(myFamousCoins);\r\n }\r\n\r\n myFamousCoinsSubscribe() {\r\n this.myFamousCoinsSubscription = this._walletService.onMyFavCoinsChange.subscribe(isChange => {\r\n if (isChange) {\r\n this.setCoins();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This function will be called when WalletService selects a new coin\r\n */\r\n selectedCoinSubscribe(){\r\n this.selectedCoinSubscription = this._walletService.onCurrentWalletChange.subscribe( () => {\r\n //! Usually the coin selection happens from this component and from drop down list, but in some cases like (AddNewCoin), selection\r\n //! Can be done from other place of code, so we need to update the selected coin here\r\n this.selectedCoin = this._walletService.CurrentWalletCoin;\r\n \r\n if (this._route.url != this._currentRoute && this._route.url != '/wallet/portfolio') {\r\n this._route.navigate(['/wallet/device']);\r\n }\r\n });\r\n }\r\n\r\n uiAlertSubscribe() {\r\n this.uiAlertSubscription = this._deviceService.uiAlert$.subscribe(uiEvent => {\r\n switch (uiEvent) {\r\n case UiEvent.Blockchain_Synchronizing:\r\n this.setSyncMode(SyncMode.Synchronizing);\r\n break;\r\n case UiEvent.Blockchain_Synchronized:\r\n this.setSyncMode(SyncMode.Synchronized);\r\n break;\r\n case UiEvent.Blockchain_Disconnected:\r\n this.setSyncMode(SyncMode.Disconnected);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n setSyncMode(mode: SyncMode) {\r\n this.syncMode = mode;\r\n }\r\n\r\n reDiscovery() {\r\n this._walletService.reDiscovery(this.headerMode, this.selectedCoin);\r\n }\r\n\r\n openModal() {\r\n this._dialogService.open(WalletAddCoinComponent, {width: '100%'});\r\n }\r\n\r\n private _changeLayoutSubscribe() {\r\n this.changeLayoutSubscription = this._layoutService.onLayoutChange.subscribe((layout: LayoutMode) => {\r\n this.headerMode = layout;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.changeLayoutSubscription.unsubscribe();\r\n this.myFamousCoinsSubscription.unsubscribe();\r\n this.uiAlertSubscription.unsubscribe();\r\n this.selectedCoinSubscription.unsubscribe();\r\n }\r\n}\r\n","\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{selectedCoin?.coinInfo | tokenTypeToName: true}} \r\n
\r\n
\r\n
\r\n\r\n","import {ChangeDetectorRef, Component, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\r\n\r\nimport {Helpers} from '../../services/helpers';\r\nimport {ScriptLoaderService} from '../../services/script-loader.service';\r\nimport { LayoutMode } from '@core/models/layout-mode';\r\nimport { LayoutService } from '@core/services/layout.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-page-wrapper',\r\n templateUrl: './wallet-layout.component.html',\r\n styleUrls: ['./wallet-layout.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class WalletLayoutComponent implements OnInit, OnDestroy {\r\n\r\n constructor(private _scriptService: ScriptLoaderService,\r\n private _layoutService: LayoutService,\r\n private _ref: ChangeDetectorRef) {\r\n }\r\n\r\n layoutMode: LayoutMode;\r\n changeLayoutSubscription: Subscription;\r\n\r\n async ngOnInit() {\r\n this._changeLayoutSubscribe();\r\n this._loadScripts();\r\n }\r\n\r\n private _loadScripts(): void {\r\n this._scriptService.load(\r\n './assets/js/wallet/chart.min.js',\r\n 'https://cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js',\r\n './assets/js/wallet/script.js')\r\n .then(() => {\r\n Helpers.initWalletEffects();\r\n Helpers.WalletLoading(true);\r\n }, error => {\r\n console.warn('Error on script loaded in wallet ', error);\r\n });\r\n }\r\n\r\n private _changeLayoutSubscribe() {\r\n this.changeLayoutSubscription = this._layoutService.onLayoutChange.subscribe((layout: LayoutMode) => {\r\n this.layoutMode = layout;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.changeLayoutSubscription.unsubscribe();\r\n }\r\n}","\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Copied to Clipboard !
\r\n\r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {DialogService} from \"@shared/dialog/_services/dialog.service\";\r\n\r\n@Component({\r\n selector: 'app-wallet-no-backup',\r\n templateUrl: './wallet-no-backup.component.html',\r\n styleUrls: ['./wallet-no-backup.component.css']\r\n})\r\nexport class WalletNoBackupComponent implements OnInit, OnDestroy {\r\n\r\n confirmationSubscription: Subscription;\r\n\r\n constructor(private _dialogService: DialogService) { }\r\n\r\n ngOnInit() {\r\n this.confirmationSubscribe();\r\n }\r\n\r\n confirmationSubscribe() {\r\n // this.confirmationSubscription = this.connectService.uiAlert$.subscribe(uiEvent => {\r\n // if (uiEvent === UiEvent.Request_Confirmation) {\r\n // let confirm = this.userSettingService.getNoBackupConfirmation();\r\n // if (confirm === true) {\r\n // this.connectService.receiveConfirmation(true);\r\n // } else {\r\n // TODO implement it with angular-material\r\n // Helpers.showModal(true, 'no-backup-modal', true);\r\n // }\r\n // }\r\n // });\r\n }\r\n\r\n doBackup() {\r\n // this.connectService.receiveConfirmation(true);\r\n // this.userSettingService.setNoBackupConfirmation(false);\r\n // this.close();\r\n // this.router.navigate(['/wallet/backup']);\r\n }\r\n\r\n accept() {\r\n // this.connectService.receiveConfirmation(true);\r\n // this.userSettingService.setNoBackupConfirmation(true);\r\n // this.close();\r\n }\r\n\r\n close() {\r\n this._dialogService.closeAll();\r\n }\r\n\r\n ngOnDestroy() {\r\n if(this.confirmationSubscription){\r\n this.confirmationSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Your Prokey is not backed up!\r\n
\r\n
\r\n
\r\n If you device is ever lost or damaged, your funds will be lost. Backup your device first, to protect your coins against such events.\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {Router} from '@angular/router';\r\n\r\nimport {UiEvent} from '@core/models/connect/ui-event.enum';\r\nimport {WalletService} from '../../services/wallet.service';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\n\r\n\r\n@Component({\r\n selector: 'app-wallet-notify-layout',\r\n templateUrl: './wallet-notify-layout.component.html',\r\n styleUrls: ['./wallet-notify-layout.component.css']\r\n})\r\nexport class WalletNotifyLayoutComponent implements OnInit, OnDestroy {\r\n\r\n deviceSubscription: Subscription;\r\n uiAlertSubscription: Subscription;\r\n changeWalletSubscription: Subscription;\r\n\r\n showFirwareOutdated: boolean = false;\r\n showNeedsBackup: boolean = false;\r\n showIsTestCoin: boolean = false;\r\n\r\n constructor(private _walletService: WalletService, private _deviceService: WalletDeviceService, private router: Router) {\r\n }\r\n\r\n ngOnInit() {\r\n this.deviceSubscribe();\r\n this.uiAlertSubscribe();\r\n this.changeWalletSubscribe();\r\n }\r\n\r\n deviceSubscribe() {\r\n this.deviceSubscription = this._deviceService.device$.subscribe(device => {\r\n if (device.features) {\r\n this.showNeedsBackup = device.features.needs_backup === true;\r\n }\r\n });\r\n }\r\n\r\n uiAlertSubscribe() {\r\n this.uiAlertSubscription = this._deviceService.uiAlert$.subscribe(uiEvent => {\r\n switch (uiEvent) {\r\n case UiEvent.Firmware_Outdated:\r\n this.showFirwareOutdated = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n changeWalletSubscribe() {\r\n this.changeWalletSubscription = this._walletService.onCurrentWalletChange.subscribe(() => {\r\n this.showIsTestCoin = this._walletService.CurrentWalletCoin.coinInfo.test;\r\n });\r\n }\r\n\r\n doBackup() {\r\n if (this._walletService.CurrentWallet == null) {\r\n let defaultCoin = this._walletService.WalletCoins.defaultCoin;\r\n this._walletService.changeCurrentWallet(defaultCoin);\r\n }\r\n\r\n this.router.navigate(['/wallet/backup']);\r\n }\r\n\r\n doUpdate() {\r\n this.router.navigate(['/firmware/update']);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.deviceSubscription.unsubscribe();\r\n this.uiAlertSubscription.unsubscribe();\r\n this.changeWalletSubscription.unsubscribe();\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
\r\n Your Prokey is not backed up.
\r\n Protect your coins from the unexpected. Start now.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n A new PROKEY firmware update is available.
\r\n Upgrade to access the newest features.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n Testnet coin
\r\n The current coin is for testing porpuses.\r\n
\r\n
\r\n
\r\n
\r\n","import {Component} from '@angular/core';\r\nimport {Helpers} from '../../services/helpers';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\nimport {DialogService} from \"@shared/dialog/_services/dialog.service\";\r\n\r\n@Component({\r\n selector: 'app-wallet-passphrase-request',\r\n templateUrl: './wallet-passphrase-request.component.html',\r\n styleUrls: ['./wallet-passphrase-request.component.css']\r\n})\r\nexport class WalletPassphraseRequestComponent {\r\n\r\n constructor(private _deviceService: WalletDeviceService, private _dialogService: DialogService) {\r\n }\r\n\r\n model: any = {passphrase: '', confirmPassphrase: ''};\r\n showPass: boolean = false;\r\n\r\n enterPassphrase() {\r\n this._deviceService.receivePassphrase(this.model.passphrase);\r\n this.model.passphrase = this.model.confirmPassphrase = '';\r\n this._dialogService.closeAll();\r\n }\r\n\r\n changeType() {\r\n this.showPass = !this.showPass;\r\n Helpers.changeInputType(this.showPass ? 'text' : 'password', 'passphrase', 'confirmPassphrase');\r\n }\r\n}\r\n","
\r\n
\r\n Set Prokey Passphrase\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n What is Passphrase?\r\n \r\n To access your default wallet, leave your passphrase blank.\r\n \r\n
\r\n","import {Component} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-wallet-pin-on-device',\r\n templateUrl: './wallet-pin-on-device.component.html',\r\n styleUrls: ['./wallet-pin-on-device.component.css']\r\n })\r\n\r\n export class WalletPinOnDeviceComponent {\r\n\r\n }\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n
Enter Prokey PIN
\r\n
\r\n Click or to choose a number and press OK to select it. Once you done, Long press OK button to enter.\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import {Component} from '@angular/core';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\nimport {DialogService} from \"@shared/dialog/_services/dialog.service\";\r\n\r\n@Component({\r\n selector: 'app-wallet-pin-request',\r\n templateUrl: './wallet-pin-request.component.html',\r\n styleUrls: ['./wallet-pin-request.component.css']\r\n})\r\nexport class WalletPinRequestComponent {\r\n\r\n model: any = { pin: '' };\r\n submitDisabled: boolean = true;\r\n\r\n constructor(private _deviceService: WalletDeviceService, private _dialogService: DialogService) {\r\n }\r\n\r\n backspacePin() {\r\n let currentpin: string = this.model.pin;\r\n if (currentpin.length > 0) {\r\n currentpin = currentpin.substring(0, currentpin.length - 1);\r\n }\r\n if (currentpin.length === 0) {\r\n this.submitDisabled = true;\r\n }\r\n this.model.pin = currentpin;\r\n }\r\n\r\n addPin(value) {\r\n const maxInputLength = 9;\r\n let currentPin: string = this.model.pin;\r\n if (currentPin.length < maxInputLength) {\r\n currentPin += value;\r\n this.model.pin = currentPin;\r\n }\r\n if (currentPin.length > 0) {\r\n this.submitDisabled = false;\r\n }\r\n }\r\n\r\n submitPin() {\r\n this._dialogService.closeAll();\r\n this._deviceService.receivePin(this.model.pin);\r\n this.model.pin = '';\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n
Enter Prokey PIN
\r\n The PIN layout is displayed on your device\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
How PIN works?
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {WalletService} from '../../services/wallet.service';\r\nimport {CoinModel} from '@core/models/connect/coin-model';\r\nimport {AccountBrief} from '@core/models/connect/account-brief';\r\nimport {CoinMarketService} from '../../services/coin-market.service';\r\nimport {Helpers} from '../../services/helpers';\r\nimport {UiEvent} from '@core/models/connect/ui-event.enum';\r\nimport {WalletDeviceService} from \"../../services/wallet-device.service\";\r\n\r\nenum SidebarMode {\r\n Disconnected = 'Disconnected',\r\n LazyLoading = 'LazyLoading',\r\n CompleteDiscovery = 'CompleteDiscovery',\r\n}\r\n\r\n@Component({\r\n selector: 'app-wallet-sidebar',\r\n templateUrl: './wallet-sidebar-layout.component.html'\r\n})\r\nexport class WalletSidebarLayoutComponent implements OnInit, OnDestroy {\r\n\r\n coin: CoinModel;\r\n accountList: AccountBrief[] = [];\r\n tempList: AccountBrief[] = [];\r\n selectedAccount: AccountBrief = {};\r\n newAccount: AccountBrief = {};\r\n\r\n changeWalletSubscription: Subscription;\r\n newAccountDiscoveredSubscription: Subscription;\r\n discoveryFinishedSubscription: Subscription;\r\n uiAlertSubscription: Subscription;\r\n\r\n sidebarMode: SidebarMode = SidebarMode.Disconnected;\r\n completeDiscovery: boolean = false;\r\n canAddAccount: boolean = false;\r\n currency: string;\r\n\r\n constructor(private _deviceService: WalletDeviceService,\r\n private _walletService: WalletService,\r\n private _coinMarketService: CoinMarketService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.currency = this._coinMarketService.getCurrentCurrency();\r\n this._uiAlertSubscribe();\r\n this._changeWalletSubscribe();\r\n this._newAccountDiscoveredSubscribe();\r\n this._discoveryFinishedSubscribe();\r\n }\r\n\r\n private _changeWalletSubscribe() {\r\n this.changeWalletSubscription = this._walletService.onCurrentWalletChange.subscribe(() => {\r\n if (this._walletService.CurrentWalletCoin) {\r\n this.coin = this._walletService.CurrentWalletCoin;\r\n this.accountList = [];\r\n this.completeDiscovery = false;\r\n this.sidebarMode = SidebarMode.LazyLoading;\r\n }\r\n });\r\n }\r\n\r\n private _newAccountDiscoveredSubscribe() {\r\n this.newAccountDiscoveredSubscription = this._walletService.onNewAccountDiscovered.subscribe(accountIndex => {\r\n try {\r\n\r\n if (accountIndex < 0) {\r\n return;\r\n }\r\n\r\n const nextAccount = this._walletService.CurrentWallet.getAccountBrief(accountIndex);\r\n this.accountList.push(nextAccount);\r\n\r\n if (accountIndex === 0) {\r\n this.selectedAccount = nextAccount;\r\n this._walletService.setCurrentAccountOfCurrentWallet(accountIndex);\r\n Helpers.WalletLoading(false);\r\n }\r\n } catch (error) {\r\n console.warn('on discover new account error. ', error);\r\n Helpers.WalletLoading(false);\r\n Helpers.canSelectCoin(true);\r\n this._deviceService.setUiAlertSource(UiEvent.Blockchain_Disconnected);\r\n }\r\n });\r\n }\r\n\r\n private _discoveryFinishedSubscribe() {\r\n this.discoveryFinishedSubscription = this._walletService.onCurrentWalletDiscoveryFinished.subscribe(isFinished => {\r\n if (isFinished) {\r\n this.completeDiscovery = true;\r\n this.sidebarMode = SidebarMode.CompleteDiscovery;\r\n this.canAddAccount = this._walletService.CurrentWallet.canAddNewAccount();\r\n this._deviceService.setUiAlertSource(UiEvent.Blockchain_Synchronized);\r\n Helpers.canSelectCoin(true);\r\n\r\n //! Set market price\r\n this._coinMarketService.setCoinMarket(this._walletService.CurrentWalletCoin).then(() => {\r\n this.accountList.forEach(x => this._coinMarketService.setBalancePrice(x));\r\n });\r\n }\r\n });\r\n }\r\n\r\n private _uiAlertSubscribe() {\r\n this.uiAlertSubscription = this._deviceService.uiAlert$.subscribe(uiEvent => {\r\n if (uiEvent === UiEvent.Blockchain_Disconnected) {\r\n this.sidebarMode = SidebarMode.Disconnected;\r\n }\r\n });\r\n }\r\n\r\n changeAccount_OnClick(account: AccountBrief) {\r\n this.selectedAccount = account;\r\n this._walletService.setCurrentAccountOfCurrentWallet(account.id);\r\n }\r\n\r\n addAccount_OnClick() {\r\n if (!this.canAddAccount) {\r\n return;\r\n }\r\n this._walletService.AddNewAccount();\r\n this.canAddAccount = false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.changeWalletSubscription.unsubscribe();\r\n this.newAccountDiscoveredSubscription.unsubscribe();\r\n this.discoveryFinishedSubscription.unsubscribe();\r\n this.uiAlertSubscription.unsubscribe();\r\n this._walletService.onNewAccountDiscovered.unsubscribe();\r\n }\r\n}\r\n","
Accounts
\r\n\r\n 0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Add Account\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { WalletService } from '@core/services/wallet.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-wallet-sidemenu',\r\n templateUrl: './wallet-sidemenu-layout.component.html',\r\n styleUrls: ['./wallet-sidemenu-layout.component.css']\r\n})\r\nexport class WalletSidemenuLayoutComponent implements OnInit, OnDestroy {\r\n\r\n disableSideMenu: boolean = true;\r\n discoveryFinishedSubscription: Subscription;\r\n\r\n constructor(private _walletService: WalletService) { }\r\n\r\n ngOnInit() {\r\n this.discoveryFinishedSubscribe();\r\n }\r\n\r\n private discoveryFinishedSubscribe() {\r\n this.discoveryFinishedSubscription = this._walletService.onCurrentWalletDiscoveryFinished.subscribe(isFinished => {\r\n if (isFinished) {\r\n this.disableSideMenu = false;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.discoveryFinishedSubscription.unsubscribe();\r\n }\r\n\r\n}\r\n","\r\n","import {NgModule, Optional, SkipSelf} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {RouterModule} from \"@angular/router\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {HTTP_INTERCEPTORS} from \"@angular/common/http\";\r\n\r\n// import RxJs needed operators only once\r\nimport \"rxjs/operators\";\r\n\r\nimport {XsrfInterceptor} from \"./services/xsrf.interceptor\";\r\nimport {CustomErrorHandlerService} from \"./services/custom-error-handler.service\";\r\nimport {ScriptLoaderService} from \"./services/script-loader.service\";\r\nimport {WalletLayoutComponent} from './component/wallet-layout/wallet-layout.component';\r\nimport {WalletHeaderLayoutComponent} from './component/wallet-header-layout/wallet-header-layout.component';\r\nimport {WalletFooterLayoutComponent} from './component/wallet-footer-layout/wallet-footer-layout.component';\r\nimport {WalletSidebarLayoutComponent} from './component/wallet-sidebar-layout/wallet-sidebar-layout.component';\r\nimport {WalletDeviceInfoComponent} from './component/wallet-device-info/wallet-device-info.component';\r\nimport {WalletSidemenuLayoutComponent} from './component/wallet-sidemenu-layout/wallet-sidemenu-layout.component';\r\nimport {WalletPinRequestComponent} from './component/wallet-pin-request/wallet-pin-request.component';\r\nimport {WalletService} from \"./services/wallet.service\";\r\nimport {SharedModule} from \"@shared/shared.module\";\r\nimport {WalletPassphraseRequestComponent} from './component/wallet-passphrase-request/wallet-passphrase-request.component';\r\nimport {WindowService} from \"./services/window.service\";\r\nimport {AppHeaderComponent} from './component/app-header/app-header.component';\r\nimport {WalletNotifyLayoutComponent} from './component/wallet-notify-layout/wallet-notify-layout.component';\r\nimport {CoinMarketService} from \"./services/coin-market.service\";\r\nimport {CoinUnitPipe} from \"@shared/pipes/coin-unit.pipe\";\r\nimport {ChallengeService} from \"./services/bootloader/challenge.service\";\r\nimport {BridgeService} from \"./services/bootloader/bridge.service\";\r\nimport {BootloaderService} from \"./services/bootloader/bootloader.service\";\r\nimport {WebusbService} from \"./services/bootloader/webusb.service\";\r\nimport {TransportService} from \"./services/bootloader/transport.service\";\r\nimport {WalletAddCoinComponent} from './component/wallet-add-coin/wallet-add-coin.component';\r\nimport {WalletForgetDeviceComponent} from './component/wallet-forget-device/wallet-forget-device.component';\r\nimport {WalletNoBackupComponent} from './component/wallet-no-backup/wallet-no-backup.component';\r\nimport {WalletPinOnDeviceComponent} from \"./component/wallet-pin-on-device/wallet-pin-on-device.component\";\r\nimport {WalletDeviceRebootComponent} from \"./component/wallet-device-reboot/wallet-device-reboot.component\"\r\nimport {CoinTokenTypeToNamePipe} from \"@shared/pipes/coin-type-to-name.pipe\";\r\nimport {SpinnerLoadingComponent} from './component/spinner-loading/spinner-loading.component';\r\nimport {WalletAddCustomTokenComponent} from \"./component/wallet-add-coin/wallet-add-custom-token/wallet-add-custom-token.component\";\r\nimport {MatDialogModule} from \"@angular/material/dialog\";\r\nimport {MatCommonModule} from \"@angular/material/core\";\r\nimport {ExchangeLayoutComponent} from \"@core/component/exchange-layout/exchange-layout.component\";\r\nimport { LayoutService } from \"./services/layout.service\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatCardModule } from \"@angular/material/card\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { TourMatMenuModule } from \"ngx-ui-tour-md-menu\";\r\nimport { WalletTourService } from \"./services/wallet-tour.service\";\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FormsModule,\r\n SharedModule,\r\n MatCommonModule,\r\n MatDialogModule,\r\n MatMenuModule,\r\n MatCardModule,\r\n MatIconModule,\r\n TourMatMenuModule,\r\n ],\r\n exports: [\r\n // components that are used in app.component.ts will be listed here.\r\n AppHeaderComponent,\r\n WalletLayoutComponent,\r\n WalletHeaderLayoutComponent,\r\n WalletFooterLayoutComponent,\r\n WalletSidebarLayoutComponent,\r\n WalletNotifyLayoutComponent,\r\n SpinnerLoadingComponent\r\n ],\r\n declarations: [\r\n // components that are used in app.component.ts will be listed here.\r\n AppHeaderComponent,\r\n WalletLayoutComponent,\r\n WalletHeaderLayoutComponent,\r\n WalletFooterLayoutComponent,\r\n WalletSidebarLayoutComponent,\r\n WalletDeviceInfoComponent,\r\n WalletSidemenuLayoutComponent,\r\n WalletPinRequestComponent,\r\n WalletPassphraseRequestComponent,\r\n WalletNotifyLayoutComponent,\r\n WalletAddCoinComponent,\r\n WalletForgetDeviceComponent,\r\n WalletNoBackupComponent,\r\n WalletPinOnDeviceComponent,\r\n WalletDeviceRebootComponent,\r\n SpinnerLoadingComponent,\r\n SpinnerLoadingComponent,\r\n WalletAddCustomTokenComponent,\r\n ExchangeLayoutComponent\r\n ],\r\n providers: [\r\n // global singleton services of the whole app will be listed here.\r\n CustomErrorHandlerService,\r\n ScriptLoaderService,\r\n WalletService,\r\n WindowService,\r\n CoinMarketService,\r\n CoinUnitPipe,\r\n CoinTokenTypeToNamePipe,\r\n ChallengeService,\r\n BridgeService,\r\n BootloaderService,\r\n WebusbService,\r\n TransportService,\r\n LayoutService,\r\n WalletTourService,\r\n {provide: HTTP_INTERCEPTORS, useClass: XsrfInterceptor, multi: true}\r\n ]\r\n})\r\nexport class CoreModule {\r\n constructor(@Optional() @SkipSelf() core: CoreModule) {\r\n if (core) {\r\n throw new Error(\"CoreModule should be imported ONLY in AppModule.\");\r\n }\r\n }\r\n}\r\n","export enum ChallengeErrorCode {\r\n NO_ERR = 0,\r\n\r\n //! Client Side Errors\r\n NO_RESPONSE_FROM_BRIDGE,\r\n NO_DEVICE,\r\n CAN_NOT_ACQUIRE_DEVICE,\r\n NO_RESPONSE_FROM_DEVICE,\r\n NOT_IN_BOOTLOADER,\r\n PROTO_ERR,\r\n ERR_CHG1,\r\n ERR_CHG2,\r\n ERR_CHG3,\r\n ERR_CHG4,\r\n DEVICE_RETURN_FIRMWARE_ERROR,\r\n NO_WEB_USB,\r\n NO_TRANSPORT,\r\n USER_DID_NOT_SELECT_A_DEVICE,\r\n CAN_NOT_OPEN_USB,\r\n FAILED_WITH_REASON,\r\n INVALID_HEADER,\r\n\r\n //! Server Side Errors\r\n WRONG_PARAM = 0x80,\r\n NO_SN,\r\n WRONG_SN,\r\n DEV_NOT_FOUNDED,\r\n SECURITY_ERR_1,\r\n NO_FIRMWARE,\r\n WRONG_FIRMWARE,\r\n DEVICE_ALREADY_EXIST,\r\n WRONG_KEY_VERSION,\r\n CANNOT_PARS_FIRMWARE_SIGNATURE_DATA,\r\n WRONG_FIRMWARE_SIGNATURE_DATA,\r\n THREE_FIRMWARE_SIGNATURE_NEEDED,\r\n WRONG_FIRMWARE_SIGNATURE_LENGHT,\r\n\r\n UNDEFINED = 0xFF,\r\n}\r\n\r\nexport function GetChallengeErrorCodeViewMessage(errCode: ChallengeErrorCode, reason?:any) : string {\r\n switch(errCode) {\r\n case ChallengeErrorCode.NO_ERR:\r\n return \"No error\";\r\n case ChallengeErrorCode.NO_RESPONSE_FROM_BRIDGE:\r\n return \"No response from bridge\";\r\n case ChallengeErrorCode.NO_DEVICE:\r\n return \"No device\";\r\n case ChallengeErrorCode.CAN_NOT_ACQUIRE_DEVICE:\r\n return \"Cannot acquire device\";\r\n case ChallengeErrorCode.NO_RESPONSE_FROM_DEVICE:\r\n return \"No reponse from device\";\r\n case ChallengeErrorCode.NOT_IN_BOOTLOADER:\r\n return \"Device is not in bootloader mode\";\r\n case ChallengeErrorCode.PROTO_ERR:\r\n return \"Protobuf error\";\r\n case ChallengeErrorCode.ERR_CHG1:\r\n return \"Challenge err 1\";\r\n case ChallengeErrorCode.ERR_CHG2:\r\n return \"Challenge err 2\";\r\n case ChallengeErrorCode.ERR_CHG3:\r\n return \"Challenge err 3\";\r\n case ChallengeErrorCode.ERR_CHG4:\r\n return \"Challenge err 4\";\r\n case ChallengeErrorCode.DEVICE_RETURN_FIRMWARE_ERROR:\r\n return \"Firmware error\";\r\n case ChallengeErrorCode.NO_WEB_USB:\r\n return \"No webUSB, Check your browser\";\r\n case ChallengeErrorCode.NO_TRANSPORT:\r\n return \"No transport layer\";\r\n case ChallengeErrorCode.USER_DID_NOT_SELECT_A_DEVICE:\r\n return \"No device selected\";\r\n case ChallengeErrorCode.CAN_NOT_OPEN_USB:\r\n return \"USB can not be opened\";\r\n case ChallengeErrorCode.FAILED_WITH_REASON:\r\n return `Device returned failed, reason:${reason}`;\r\n case ChallengeErrorCode.INVALID_HEADER:\r\n return \"Invalid message header\";\r\n \r\n //! Server Side Errors\r\n case ChallengeErrorCode.WRONG_PARAM:\r\n return \"Server:Wrong parameters\";\r\n case ChallengeErrorCode.NO_SN:\r\n return \"Server:No serial number provided\";\r\n case ChallengeErrorCode.WRONG_SN:\r\n return \"Server:Wrong serial number provided\";\r\n case ChallengeErrorCode.DEV_NOT_FOUNDED:\r\n return \"Server:Device not found in DB\";\r\n case ChallengeErrorCode.SECURITY_ERR_1:\r\n return \"Server:Security err 1\";\r\n case ChallengeErrorCode.NO_FIRMWARE:\r\n return \"Server:No firmware file\";\r\n case ChallengeErrorCode.WRONG_FIRMWARE:\r\n return \"Server:Wrong firmware file\";\r\n case ChallengeErrorCode.DEVICE_ALREADY_EXIST:\r\n return \"Server:Device already exist in DB\";\r\n case ChallengeErrorCode.WRONG_KEY_VERSION:\r\n return \"Server:Wrong AuthKey\";\r\n default:\r\n return `Unknown error:${errCode}`;\r\n }\r\n}\r\n","import { CoinModel } from \"./coin-model\";\r\n\r\nexport enum CoinMarketStatus {\r\n Positive = 'Positive',\r\n Negative = 'Negative',\r\n}\r\n\r\nexport interface AssetInfo {\r\n coin: CoinModel;\r\n coinId: string; // use for coin market\r\n totalBalance?: number;\r\n totalBalancePrice?: number;\r\n coinPrice?: number;\r\n coinMarketChangeStatus?: CoinMarketStatus;\r\n priceChangePercentage?: number;\r\n priceChangeMap: Map;\r\n isDiscoveryFinished: boolean;\r\n marketPrices?: any[];\r\n onChart: boolean;\r\n isDisconnected: boolean;\r\n isLoadedPrice: boolean;\r\n}\r\n","export enum ButtonRequestType {\r\n ButtonRequest_Other = 'ButtonRequest_Other',\r\n ButtonRequest_FeeOverThreshold = 'ButtonRequest_FeeOverThreshold',\r\n ButtonRequest_ConfirmOutput = 'ButtonRequest_ConfirmOutput',\r\n ButtonRequest_ResetDevice = 'ButtonRequest_ResetDevice',\r\n ButtonRequest_ConfirmWord = 'ButtonRequest_ConfirmWord',\r\n ButtonRequest_WipeDevice = 'ButtonRequest_WipeDevice',\r\n ButtonRequest_ProtectCall = 'ButtonRequest_ProtectCall',\r\n ButtonRequest_SignTx = 'ButtonRequest_SignTx',\r\n ButtonRequest_FirmwareCheck = 'ButtonRequest_FirmwareCheck',\r\n ButtonRequest_Address = 'ButtonRequest_Address',\r\n ButtonRequest_PublicKey = 'ButtonRequest_PublicKey',\r\n ButtonRequest_MnemonicWordCount = 'ButtonRequest_MnemonicWordCount',\r\n ButtonRequest_MnemonicInput = 'ButtonRequest_MnemonicInput',\r\n ButtonRequest_PassphraseType = 'ButtonRequest_PassphraseType',\r\n ButtonRequest_UnknownDerivationPath = 'ButtonRequest_UnknownDerivationPath',\r\n ButtonRequest_EnterPinOnDevice = 'ButtonRequest_EnterPinOnDevice', \r\n ButtonRequest_EnterNewPinOnDevice = 'ButtonRequest_EnterNewPinOnDevice',\r\n ButtonRequest_ReEnterNewPinOnDevice = 'ButtonRequest_ReEnterNewPinOnDevice',\r\n ButtonRequest_PinOnDeviceDone = 'ButtonRequest_PinOnDeviceDone',\r\n}\r\n","import { CoinBaseType } from \"@webcore/coins/CoinInfo\";\r\nimport { BitcoinBaseCoinInfoModel,\r\n EthereumBaseCoinInfoModel,\r\n Erc20BaseCoinInfoModel,\r\n MiscCoinInfoModel,\r\n OmniCoinInfoModel,\r\n RippleCoinInfoModel,\r\n NemCoinInfoModel\r\n } from \"@webcore/models/CoinInfoModel\"\r\n\r\nexport class CoinModel {\r\n public coinInfo: BitcoinBaseCoinInfoModel | EthereumBaseCoinInfoModel | Erc20BaseCoinInfoModel | MiscCoinInfoModel | OmniCoinInfoModel | RippleCoinInfoModel | NemCoinInfoModel;\r\n\r\n public isOneAccountPerAddress: boolean;\r\n public isFamous: boolean;\r\n public type: CoinBaseType;\r\n public marketData: any;\r\n public simplePrice: any;\r\n public isAvailableMarketData: boolean;\r\n public isCustomToken: boolean;\r\n\r\n //! This flag is used to show this coin in drop down list, true means show. it is set in WalletAddCoinComponent::subscribeOtherCoins\r\n public isSelected: boolean;\r\n\r\n constructor(coinInfo: BitcoinBaseCoinInfoModel | EthereumBaseCoinInfoModel | Erc20BaseCoinInfoModel | MiscCoinInfoModel | OmniCoinInfoModel | RippleCoinInfoModel | NemCoinInfoModel, coinBaseType?: CoinBaseType) {\r\n this.coinInfo = coinInfo;\r\n if(coinInfo.coinBaseType != null) {\r\n this.type = coinInfo.coinBaseType;\r\n } else if(coinBaseType != null) {\r\n this.type = coinBaseType;\r\n } else {\r\n throw new Error(\"Coin Base Type is not set\");\r\n }\r\n }\r\n\r\n getImageUrl(): string {\r\n if (this.coinInfo.coinBaseType === CoinBaseType.ERC20) {\r\n return `./assets/img/coins/${(this.coinInfo as Erc20BaseCoinInfoModel).address}.png`;\r\n }\r\n return `./assets/img/coins/${this.coinInfo.shortcut.toLowerCase()}.png`;\r\n }\r\n}\r\n","export enum DeviceFirmwareStatus {\r\n Valid = 'valid',\r\n Outdated = 'outdated',\r\n Required = 'required',\r\n}\r\n","export enum DeviceMode {\r\n Normal = 'normal',\r\n Bootloader = 'bootloader',\r\n Initialize = 'initialize',\r\n Seedless = 'seedless',\r\n}\r\n","export enum FailureType {\r\n Failure_UnexpectedMessage = 1,\r\n Failure_ButtonExpected = 2,\r\n Failure_DataError = 3,\r\n Failure_ActionCancelled = 4,\r\n Failure_PinExpected = 5,\r\n Failure_PinCancelled = 6,\r\n Failure_PinInvalid = 7,\r\n Failure_InvalidSignature = 8,\r\n Failure_ProcessError = 9,\r\n Failure_NotEnoughFunds = 10,\r\n Failure_NotInitialized = 11,\r\n Failure_PinMismatch = 12,\r\n Failure_WipeCodeMismatch = 13,\r\n Failure_FirmwareError = 99,\r\n}\r\n","export enum TransactionType {\r\n Sent = 'sent',\r\n Received = 'recv',\r\n}\r\n","export enum UiEvent {\r\n None = 'none',\r\n Device_Initilaized = 'device_initialized',\r\n Device_NotInitilaized = 'device_not_initialized',\r\n Blockchain_Disconnected = 'blockchain_disconnected',\r\n Blockchain_Synchronizing = 'blockchain_Synchronizing',\r\n Blockchain_Synchronized = 'blockchain_Synchronized',\r\n Close_Window = 'ui-close_window',\r\n Browser_Not_Supported = 'ui-browser_not_supported',\r\n Browser_Outdated = 'ui-browser_outdated',\r\n Device_Firmware_Outdated = 'ui-device_firmware_outdated',\r\n Firmware_Outdated = 'ui-device_firmware_outdated',\r\n Change_Settings = 'ui-change_settings',\r\n Request_Confirmation = 'ui-request_confirmation',\r\n Request_Button = 'ui-button',\r\n Request_Pin = 'ui-request_pin',\r\n Invalid_Pin = 'ui-invalid_pin',\r\n Request_Passphrase = 'ui-request_passphrase',\r\n Request_Passphrase_On_Device = 'ui-request_passphrase_on_device',\r\n Invalid_Passphrase = 'ui-invalid_passphrase',\r\n Invalid_Passphrase_Action = 'ui-invalid_passphrase_action',\r\n}\r\n","export enum LayoutMode {\r\n Default = 'Default',\r\n Portfolio = 'Portfolio',\r\n Exchange = 'Exchange',\r\n}\r\n","export enum ProkeySettingsKey {\r\n BITCOIN_SERVERS = 'bitcoreServers',\r\n DISPLAY_CURRENCY = 'displayCurrency',\r\n DISPLAY_COIN = 'displayCoin',\r\n EXPLORER_URL = 'explorerUrl',\r\n ENABLE_LOGS = 'enableLog',\r\n FAMOUS_COINS = 'famousCoins',\r\n ASSET_COINS = 'assetCoins',\r\n CUSTOM_TOKENS = 'customTokens',\r\n IS_VIEWED_TOUR = 'isViewedTour',\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\r\n\r\nimport {TransportInterface} from '@core/models/bootloader/transportInterface';\r\nimport {Features} from '@webcore/models/Prokey';\r\nimport {ChallengeMessage} from '@core/models/bootloader/ChallengeMessage';\r\nimport {ChallengeErrorCode} from '@core/models/bootloader/ChallengeErrors';\r\nimport {RestUrls} from \"../../../_configs/rest-urls\";\r\nimport { FirmwareSignatures } from '@models/bootloader/FirmwareSignatures';\r\n\r\ndeclare const Buffer\r\n\r\n@Injectable()\r\nexport class BootloaderService {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n _transport: TransportInterface;\r\n\r\n public SetTransport(transport: TransportInterface): void {\r\n this._transport = transport;\r\n }\r\n\r\n\r\n public static ProtobufToFeatures(buf: string): Features {\r\n let f: Features = {};\r\n\r\n if (buf.length < 4) {\r\n return null;\r\n }\r\n\r\n while (buf.length > 0) {\r\n try {\r\n // CB for control byte\r\n var cb = Number.parseInt(buf.substring(0, 2), 16);\r\n var type = cb & 0x07;\r\n var field = (cb >> 3) & 0x0F;\r\n\r\n if ((cb & 0x80) == 0x80) {\r\n buf = buf.substring(2);\r\n cb = Number.parseInt(buf.substring(0, 2), 16);\r\n field |= (cb<<4);\r\n }\r\n\r\n var tmp: string;\r\n var num: number;\r\n\r\n if (type == 0) { // Varint\r\n num = Number.parseInt(buf.substring(2, 4), 16);\r\n buf = buf.substring(4);\r\n }\r\n else if (type == 2) { // Length-delimited\r\n var len = Number.parseInt(buf.substring(2, 4), 16);\r\n tmp = buf.substring(4, 4 + len * 2);\r\n buf = buf.substring(4 + len * 2);\r\n }\r\n else {\r\n throw new Error(\"MSG type is not supported\");\r\n }\r\n\r\n if (field == 1) {\r\n f.vendor = new Buffer(tmp, 'hex').toString();\r\n }\r\n else if (field == 2) {\r\n f.major_version = num;\r\n }\r\n else if (field == 3) {\r\n f.minor_version = num;\r\n }\r\n else if (field == 4) {\r\n f.patch_version = num;\r\n }\r\n else if (field == 5) {\r\n if (num == 1) {\r\n f.bootloader_mode = true;\r\n } else {\r\n f.bootloader_mode = false;\r\n }\r\n }\r\n else if (field == 18) {\r\n if (num == 1) {\r\n f.firmware_present = true;\r\n } else {\r\n f.firmware_present = false;\r\n }\r\n }\r\n\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n return f;\r\n }\r\n\r\n /** Set firmware signatures\r\n * ONLY WORKS WITH BOOTLOADER > 3.x.x\r\n */\r\n public async SetFirmwareSignatures(updateSignature?: (signature:FirmwareSignatures) => void): Promise {\r\n //! Get firmware signature data from server\r\n var res = await this.SendToServer(RestUrls.getOptimumFirmwareSignatures(), {});\r\n if(res.success == false) {\r\n return res;\r\n }\r\n\r\n //! Parse the model\r\n const signatures: FirmwareSignatures = JSON.parse(res.payload);\r\n if(signatures == null) {\r\n return { success: false, errorCode: ChallengeErrorCode.CANNOT_PARS_FIRMWARE_SIGNATURE_DATA };\r\n } \r\n\r\n if(signatures.signatures.length != 3) {\r\n return { success: false, errorCode: ChallengeErrorCode.THREE_FIRMWARE_SIGNATURE_NEEDED };\r\n }\r\n\r\n if(signatures.signatures[0].signature.length != 128) {\r\n return { success: false, errorCode: ChallengeErrorCode.WRONG_FIRMWARE_SIGNATURE_LENGHT };\r\n }\r\n\r\n if(signatures.signatures[1].signature.length != 128) {\r\n return { success: false, errorCode: ChallengeErrorCode.WRONG_FIRMWARE_SIGNATURE_LENGHT };\r\n }\r\n\r\n if(signatures.signatures[2].signature.length != 128) {\r\n return { success: false, errorCode: ChallengeErrorCode.WRONG_FIRMWARE_SIGNATURE_LENGHT };\r\n }\r\n\r\n if(updateSignature) {\r\n updateSignature(signatures);\r\n }\r\n\r\n //! Prepare data to be sent to device\r\n //! MsgID\r\n let msg = \"FFF9\"\r\n\r\n //! 202 bytes of data\r\n msg += \"000000CA\";\r\n\r\n // message MsgSetFirmwareSignature\r\n // {\r\n // required uint32 Version\t = 1;\r\n // required bytes Indexes = 2; \r\n // required bytes Signatures = 3; \r\n // }\r\n\r\n //! Version\r\n msg += `080${signatures.version}`;\r\n\r\n //! Indexes, \r\n //! Field: 2, type: Length-delimited + len = 3\r\n msg += \"1203\";\r\n\r\n //! Each SignIndex is a number between 1 to 5, So, to make it simple :), no need to convert this number to hex\r\n //! sigIndex 1\r\n msg += `0${signatures.signatures[0].index}`;\r\n //! sigIndex 2\r\n msg += `0${signatures.signatures[1].index}`;\r\n //! sigIndex 3\r\n msg += `0${signatures.signatures[2].index}`;\r\n\r\n //! Field: 3, type: Length-delimited + len = 192\r\n msg += `1AC001`;\r\n\r\n //! 64 bytes of first signature, Already in hex string\r\n msg += signatures.signatures[0].signature;\r\n\r\n //! second signature, Already in hex string\r\n msg += signatures.signatures[1].signature;\r\n\r\n //! third signature, Already in hex string\r\n msg += signatures.signatures[2].signature;\r\n\r\n //! Send message to device\r\n res = await this._transport.Call(msg);\r\n \r\n //! Check device response\r\n res = this.CheckDeviceMsg(res.payload);\r\n\r\n return res;\r\n }\r\n\r\n public async UpdateFirmware(chgMessage: ChallengeMessage, ): Promise {\r\n if (chgMessage === undefined) {\r\n return { success: false, errorCode: ChallengeErrorCode.WRONG_PARAM };\r\n }\r\n\r\n var res = await this.SendToServer(RestUrls.getBootloaderLatestFirmware(), chgMessage);\r\n if (res.success == false) {\r\n return res;\r\n }\r\n\r\n res = await this._transport.Call(res.payload);\r\n if (res.success == false)\r\n return res;\r\n\r\n res = this.CheckDeviceMsg(res.payload);\r\n\r\n return res;\r\n }\r\n\r\n public async EraseFlash(): Promise {\r\n var res = await this._transport.Call(\"000600000000\");\r\n if (res.success == false)\r\n return res;\r\n\r\n res = this.CheckDeviceMsg(res.payload);\r\n\r\n return res;\r\n }\r\n\r\n public async WipeDevice(): Promise {\r\n var res = await this._transport.Call(\"000500000000\");\r\n if(res.success == false) {\r\n return res;\r\n }\r\n\r\n res = this.CheckDeviceMsg(res.payload);\r\n\r\n return res;\r\n }\r\n\r\n public async GetFeatures(): Promise {\r\n var res = await this._transport.Call(\"000000000000\");\r\n if (res.success == false)\r\n return res;\r\n\r\n var err = this.CheckDeviceMsg(res.payload);\r\n if (err.success == false) {\r\n return err;\r\n }\r\n\r\n res.payload = res.payload.substring(12);\r\n var f = BootloaderService.ProtobufToFeatures(res.payload);\r\n\r\n return {\r\n success: true,\r\n payload: f\r\n };\r\n }\r\n\r\n public async ResetDevice(): Promise {\r\n var tmp = await this._transport.Call(\"FFF000000000\");\r\n\r\n return { success: true, errorCode: ChallengeErrorCode.NO_ERR };\r\n }\r\n\r\n public async TestDevice(): Promise {\r\n var cmd = \"0020000000370A3500FF55AA669933CC4142434445464748494A4B4C4D4E4F505152535455565758595A303132333435363738392100FF55AA669933CC\";\r\n var res = await this._transport.Call(cmd);\r\n if (res.success == false)\r\n return res;\r\n\r\n return this.CheckDeviceMsg(res.payload);\r\n }\r\n\r\n public CheckDeviceMsg(msg: string): ChallengeMessage {\r\n if (msg == null || msg === undefined) {\r\n return { success: false, }\r\n }\r\n\r\n if (msg.length < 12) {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.PROTO_ERR,\r\n }\r\n }\r\n\r\n var msgId = msg.substring(0, 4);\r\n\r\n if (msgId == \"0002\") {\r\n return { success: true }\r\n }\r\n else if (msgId == \"0003\") {\r\n var errStr = msg.substring(12);\r\n var cErrCode: ChallengeErrorCode = ChallengeErrorCode.UNDEFINED;\r\n\r\n if (errStr == \"0863\")\r\n cErrCode = ChallengeErrorCode.DEVICE_RETURN_FIRMWARE_ERROR;\r\n else if (errStr == \"0849\")\r\n cErrCode = ChallengeErrorCode.SECURITY_ERR_1;\r\n else\r\n cErrCode = Number.parseInt(errStr.substring(2), 16);\r\n\r\n return { success: false, errorCode: cErrCode, }\r\n }\r\n\r\n return { success: true }\r\n }\r\n\r\n public SendToServer(url: string, toServer: ChallengeMessage): Promise {\r\n const header = new HttpHeaders({\"Content-Type\": \"application/json\"});\r\n\r\n return this.http.post(url, toServer, {headers: header}).toPromise();\r\n }\r\n\r\n public Reset(): void {\r\n this._transport.Reset();\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient, HttpErrorResponse, HttpHeaders} from '@angular/common/http';\r\nimport {throwError} from 'rxjs';\r\nimport {catchError, map} from 'rxjs/operators';\r\nimport {ChallengeMessage} from '@core/models/bootloader/ChallengeMessage';\r\nimport {TransportInterface} from '@core/models/bootloader/transportInterface';\r\nimport {ChallengeErrorCode} from '@core/models/bootloader/ChallengeErrors';\r\n\r\nclass BridgeInstance {\r\n version: string;\r\n path: string;\r\n vendor: number;\r\n product: number;\r\n prevSession: number;\r\n session: number;\r\n}\r\n\r\n@Injectable()\r\nexport class BridgeService implements TransportInterface {\r\n\r\n kind: string = \"bridge\";\r\n\r\n _bridge: BridgeInstance;\r\n _httpRegHeader = new HttpHeaders({ \"Content-Type\": \"text/plain\" });\r\n\r\n bridgeUrl = \"http://127.0.0.1:21325/\";\r\n\r\n constructor(private http: HttpClient) {\r\n this._bridge = new BridgeInstance();\r\n this._bridge.prevSession = -1;\r\n this._bridge.session = -1;\r\n this._bridge.version = \"\";\r\n }\r\n\r\n public GetBridgeStatus(): BridgeInstance {\r\n return this._bridge;\r\n }\r\n\r\n public async Connect(): Promise {\r\n //! Already Connected\r\n if (this._bridge.session > 0)\r\n return { success: true };\r\n\r\n var res: ChallengeMessage = await this.GetVersion();\r\n if (res.success == false)\r\n return res;\r\n\r\n res = await this._enumerate();\r\n if (res.success == false)\r\n return res;\r\n\r\n res = await this._acquire();\r\n if (res.success == false)\r\n return res;\r\n\r\n return { success: true }\r\n }\r\n\r\n public async Release(): Promise {\r\n if (this._bridge.session < 0)\r\n return { success: true };\r\n\r\n var tmp: string;\r\n tmp = await this._post(\"release/\" + this._bridge.session.toString());\r\n\r\n tmp = this.SmartJsonGetValue(tmp, \"session\");\r\n if (tmp == null)\r\n return { success: false, errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_BRIDGE };\r\n\r\n //! now the session should be closed\r\n this._bridge.session = -1;\r\n this._bridge.prevSession = Number.parseInt(tmp);\r\n\r\n return { success: true };\r\n }\r\n\r\n public async Call(data: string): Promise {\r\n if (this._bridge.session < 0) {\r\n console.error(\"The session cannot be negative, connect function should be called first\")\r\n return { success: false };\r\n }\r\n\r\n var str: string = await this._post(\"call/\" + this._bridge.session.toString(), data);\r\n return { success: true, payload: str };\r\n }\r\n\r\n private async _acquire(): Promise {\r\n var tmp: string;\r\n\r\n tmp = \"acquire/\" + this._bridge.path;\r\n if (this._bridge.prevSession != -1)\r\n tmp += \"/\" + this._bridge.prevSession.toString();\r\n\r\n return await this._post(tmp).then((result) => {\r\n tmp = this.SmartJsonGetValue(result, \"session\");\r\n if (tmp == null)\r\n return { success: false, errorCode: ChallengeErrorCode.CAN_NOT_ACQUIRE_DEVICE };\r\n\r\n this._bridge.session = Number.parseInt(tmp);\r\n\r\n return { success: true }\r\n }).catch((err) => {\r\n return { success: false, errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_BRIDGE, payload: err };\r\n });\r\n }\r\n\r\n private async _enumerate(): Promise {\r\n var tmp: string;\r\n\r\n return await this._post(\"enumerate\").then((result) => {\r\n //! Path\r\n tmp = this.SmartJsonGetValue(result, \"path\");\r\n if (tmp == null)\r\n return { success: false, errorCode: ChallengeErrorCode.NO_DEVICE };\r\n\r\n this._bridge.path = tmp;\r\n\r\n //! vendor\r\n tmp = this.SmartJsonGetValue(result, \"vendor\");\r\n if (tmp == null)\r\n return { success: false, errorCode: ChallengeErrorCode.NO_DEVICE };\r\n\r\n this._bridge.vendor = Number.parseInt(tmp);\r\n\r\n //! product\r\n tmp = this.SmartJsonGetValue(result, \"product\");\r\n if (tmp == null)\r\n return { success: false, errorCode: ChallengeErrorCode.NO_DEVICE };\r\n\r\n this._bridge.product = Number.parseInt(tmp);\r\n\r\n //! session\r\n tmp = this.SmartJsonGetValue(result, \"session\")\r\n if (tmp == null)\r\n return { success: false, errorCode: ChallengeErrorCode.NO_DEVICE };\r\n\r\n this._bridge.prevSession = (tmp == \"null\") ? -1 : Number.parseInt(tmp);\r\n\r\n return { success: true, payload: this._bridge };\r\n\r\n }).catch((err) => {\r\n return { success: false, errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_BRIDGE, payload: err };\r\n });\r\n }\r\n\r\n public async GetVersion(): Promise {\r\n\r\n try {\r\n var verJson = await this._post(\"\");\r\n\r\n var ver = this.SmartJsonGetValue(verJson, \"version\");\r\n if (ver == null)\r\n return { success: false, errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_BRIDGE };\r\n\r\n this._bridge.version = ver;\r\n\r\n return { success: true, payload: ver };\r\n }\r\n catch {\r\n return { success: false, errorCode: ChallengeErrorCode.UNDEFINED };\r\n }\r\n\r\n\r\n /*var ver: string;\r\n var res: ChallengeMessage = { success: false, errorCode: ChallengeErrorCode.UNDEFINED };\r\n await this._post(\"\").then((result) => {\r\n ver = this.SmartJsonGetValue(result, \"version\");\r\n if (ver == null)\r\n res = { success: false, errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_BRIDGE };\r\n\r\n this._bridge.version = ver;\r\n\r\n res = { success: true, payload: ver };\r\n }).catch((err) => {\r\n res = { success: false, errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_BRIDGE, payload: err };\r\n });\r\n\r\n return res;*/\r\n }\r\n\r\n public async Reset(): Promise {\r\n this._bridge.prevSession = -1;\r\n this._bridge.session = -1;\r\n this._bridge.version = \"\";\r\n\r\n return { success: true };\r\n }\r\n\r\n private SmartJsonGetValue(inp: string, wts: string): string {\r\n wts = wts.toLowerCase();\r\n inp = inp.toLowerCase();\r\n\r\n if (inp.includes(wts) == false)\r\n return null;\r\n\r\n let wtsPos = inp.indexOf(wts);\r\n let sp = inp.indexOf(\":\", wtsPos) + 1;\r\n let ep = inp.indexOf(\",\", sp);\r\n if (ep < 0)\r\n ep = inp.indexOf(\"}\", sp);\r\n\r\n var res = inp.slice(sp, ep);\r\n\r\n if (res.charAt(0) === \"\\\"\")\r\n res = res.substr(1);\r\n\r\n if (res.charAt(res.length - 1) === \"\\\"\")\r\n res = res.substring(0, res.length - 1);\r\n\r\n return res;\r\n }\r\n\r\n private _post(url: string, body?: string): Promise {\r\n if (body != null) {\r\n return this.http.post(this.bridgeUrl + url, body, { headers: this._httpRegHeader, responseType: 'text' })\r\n .pipe(map(response => response || \"\"), catchError((error: HttpErrorResponse) => throwError(error)))\r\n .toPromise();\r\n } else {\r\n return this.http.post(this.bridgeUrl + url, \"\", { headers: this._httpRegHeader, responseType: 'text' })\r\n .pipe(map(response => response || \"\"), catchError((error: HttpErrorResponse) => throwError(error)))\r\n .toPromise();\r\n }\r\n }\r\n}\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\r\nimport {TransportInterface} from '@core/models/bootloader/transportInterface';\r\nimport {AuthKeyMessage, ChallengeMessage} from '@core/models/bootloader/ChallengeMessage';\r\nimport {ChallengeErrorCode} from '@core/models/bootloader/ChallengeErrors';\r\nimport {Features} from '@webcore/models/Prokey';\r\nimport {BootloaderService} from './bootloader.service';\r\nimport {MyConsole} from '@webcore/utils/console';\r\nimport {RestUrls} from \"../../../_configs/rest-urls\";\r\nimport { Version } from '@models/bootloader/Version';\r\n\r\n@Injectable()\r\nexport class ChallengeService {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n _transport: TransportInterface;\r\n\r\n public SetTransport(transport: TransportInterface): void {\r\n this._transport = transport;\r\n }\r\n\r\n public async Challenge(features: Features, updateCallBack?: (msg: string) => void): Promise {\r\n var chg: ChallengeMessage;\r\n\r\n try {\r\n\r\n\r\n \r\n\r\n //! Check bootloader version\r\n if(features == null) {\r\n return Promise.reject({\r\n success: false,\r\n errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_DEVICE,\r\n });\r\n }\r\n\r\n //! To set the key, device should be in bootloader mode\r\n if(features.bootloader_mode == undefined || features.bootloader_mode == false) {\r\n if(updateCallBack != null)\r\n updateCallBack(\"Not in bootloader mode\");\r\n\r\n return Promise.reject({\r\n success: false,\r\n errorCode: ChallengeErrorCode.NOT_IN_BOOTLOADER,\r\n });\r\n }\r\n\r\n\r\n const bootloaderVersion = `${features.major_version}.${features.minor_version}.${features.patch_version}`;\r\n\r\n if(updateCallBack != null)\r\n updateCallBack(`Bootloader version: ${bootloaderVersion}`);\r\n\r\n //! Step 1\r\n //! First Step is getting RNDD from Device\r\n chg = await this.GetRndDevice();\r\n MyConsole.Info(\"ChallengeService::Challenge->Device RNDD\", chg);\r\n if (chg.success == false) {\r\n return Promise.reject(chg);\r\n }\r\n\r\n //! Let's send this RNDD to server and get its response\r\n //! fs means 'From Server'\r\n var fs: ChallengeMessage = await this.SendToServerChallenge({\r\n ...chg,\r\n bootloaderVersion: bootloaderVersion,\r\n });\r\n\r\n if (fs.success == false)\r\n return fs;\r\n\r\n //! Step 2\r\n //! Now we got Enc(RndD) as Challenge and RndS from server\r\n chg = await this.ChallengeWithDevice(fs);\r\n if (chg.success == false)\r\n return Promise.reject(chg);\r\n\r\n //! Now device has sent the Enc(RndS), Now it should be sent to server to make sure that device is genuine\r\n fs = await this.SendToServerChallenge({\r\n ...chg,\r\n bootloaderVersion: bootloaderVersion\r\n });\r\n if (fs.success == false)\r\n return Promise.reject(fs);\r\n\r\n //! Step 3\r\n //! Now we got Hash(Hash(SessionKey)) from server\r\n chg = await this.CheckHashWithDevice(fs);\r\n if (chg.success == false)\r\n return Promise.reject(chg);\r\n\r\n fs = await this.SendToServerChallenge({\r\n ...chg,\r\n bootloaderVersion: bootloaderVersion\r\n });\r\n if (fs.success == false)\r\n return Promise.reject(fs);\r\n\r\n return { \r\n success: true, \r\n payload: chg, \r\n bootloaderVersion: bootloaderVersion\r\n }\r\n }\r\n catch\r\n {\r\n await this._transport.Release();\r\n this._transport.Reset();\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.UNDEFINED,\r\n }\r\n }\r\n }\r\n\r\n public Reset(): void {\r\n this._transport.Reset();\r\n }\r\n\r\n /**\r\n * Get device features\r\n * @returns Device Features\r\n */\r\n private async GetDeviceFeatures(): Promise {\r\n var res = await this._transport.Call(\"003700000000\");\r\n if(res.success == false){\r\n return Promise.reject({ success: false, errorCode: ChallengeErrorCode.NO_RESPONSE_FROM_DEVICE });\r\n }\r\n\r\n const err = this.CheckIfFailure(res.payload);\r\n if(err.success == false){\r\n MyConsole.Info(\"ChallengeService::GetDeviceFeatures->FAILED\", err);\r\n return Promise.reject(err);\r\n }\r\n\r\n if(res.payload.substring(0,4).toLowerCase().trim() != \"0011\") {\r\n MyConsole.Info(\"ChallengeService::GetDeviceFeatures-> Bad message type\");\r\n return Promise.reject({ success: false, errorCode: ChallengeErrorCode.INVALID_HEADER });\r\n }\r\n\r\n //! Remove MsgId + Lenght\r\n res.payload = res.payload.substring(12)\r\n\r\n return BootloaderService.ProtobufToFeatures(res.payload);\r\n }\r\n\r\n /**\r\n * Check if AuthKey already set\r\n * @returns success: true if key was set\r\n */\r\n private async GetIsKeySet(): Promise {\r\n var res = await this._transport.Call(\"FFF300000000\");\r\n if(res.success == false) {\r\n return res;\r\n }\r\n\r\n const err = this.CheckIfFailure(res.payload);\r\n if(err.success == false){\r\n MyConsole.Info(\"ChallengeService::GetIsKeySet->FAILED\", err);\r\n return err;\r\n }\r\n\r\n if (res.payload.substring(0, 16).toLowerCase().trim() != \"fff4000000260801\") {\r\n MyConsole.Info(\"ChallengeService::GetIsKeySet->Bad command or lenght\")\r\n return { success: false, errorCode: ChallengeErrorCode.INVALID_HEADER };\r\n }\r\n\r\n\r\n let data: string = res.payload;\r\n if(data == null || data.length < 38*2){\r\n MyConsole.Info(\"ChallengeService::GetIsKeySet->Bad lenght\")\r\n return { success: false, errorCode: ChallengeErrorCode.PROTO_ERR };\r\n }\r\n\r\n //! Remove CMD + Lenght + KeyVersion + SN + Field3\r\n data = data.substr(4 + 8 + 4 + (34*2), 4);\r\n\r\n if(data == \"1801\")\r\n return { success: true, payload: true };\r\n else if( data == \"1800\") {\r\n return { success: true, payload: false };\r\n }\r\n\r\n return { success: false, errorCode: ChallengeErrorCode.ERR_CHG4 };\r\n }\r\n\r\n /**\r\n * Ask device to set the AuthKey and return it, The key won't save unless WriteOtpKey calls\r\n * @returns AuthKey if success\r\n */\r\n private async SetOptKey(): Promise {\r\n var res = await this._transport.Call(\"FFF500000000\");\r\n if(res.success == false) {\r\n return res;\r\n }\r\n\r\n const err = this.CheckIfFailure(res.payload);\r\n if(err.success == false){\r\n MyConsole.Info(\"ChallengeService::SetOptKey->FAILED\", err);\r\n return err;\r\n }\r\n\r\n //! Remove MsgId + Lenght\r\n res.payload = res.payload.substring(12);\r\n\r\n const authKeyMsg = this.ProtobufParsAuthKey(res.payload);\r\n if(authKeyMsg.success == false){\r\n MyConsole.Info(\"ChallengeService::SetOptKey->Proto ERROR\")\r\n return authKeyMsg;\r\n }\r\n\r\n //! If the device can not set the key, it will return failur message, so this won't happen\r\n //! But still we can check the result\r\n if(authKeyMsg.isOptSet == false) {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.SECURITY_ERR_1\r\n };\r\n }\r\n\r\n if(authKeyMsg.authKey == null || authKeyMsg.authKey.length != 64 || authKeyMsg.sn == null || authKeyMsg.sn.length != 64){\r\n MyConsole.Info(\"ChallengeService::SetOptKey->Auth key or serial number data length is invalid\");\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.WRONG_PARAM,\r\n };\r\n }\r\n\r\n //! The message contains AuthKey, The message should be sent to server and server should return back the hash of AuthKey\r\n return authKeyMsg;\r\n }\r\n\r\n /**\r\n * Write AuthKey to OPT permanently\r\n * @param serverMessage\r\n * @returns\r\n */\r\n private async WriteOtpKey(serverMessage: AuthKeyMessage): Promise {\r\n //! Send Hash(AuthKey) to device\r\n var res = await this._transport.Call(\"FFF7000000220A20\" + serverMessage.authKey);\r\n if(res.success == false) {\r\n return res;\r\n }\r\n\r\n const err = this.CheckIfFailure(res.payload);\r\n if(err.success == false){\r\n MyConsole.Info(\"ChallengeService::WriteOtpKey->FAILED\", err);\r\n return err;\r\n }\r\n\r\n return this.ProtobufParsAuthKey(res.payload);\r\n }\r\n\r\n /**\r\n * Step 3: Check Session key hash with device\r\n * @param chg1 Session key hash\r\n * @returns\r\n */\r\n private async CheckHashWithDevice(chg1: ChallengeMessage): Promise {\r\n var cmd = \"FFF10000002408032A20\" + chg1.checkHash;\r\n\r\n var res = await this._transport.Call(cmd);\r\n if (res.success == false)\r\n return res;\r\n\r\n const err = this.CheckIfFailure(res.payload);\r\n if(err.success == false){\r\n MyConsole.Info(\"ChallengeService::CheckHashWithDevice->FAILED\", err);\r\n return err;\r\n }\r\n\r\n if (res.payload.substring(0, 16).toLowerCase().trim() != \"fff1000000240804\") {\r\n MyConsole.Info(\"ChallengeService::CheckHashWithDevice->Bad command or lenght\")\r\n return { success: false, errorCode: ChallengeErrorCode.ERR_CHG4 };\r\n }\r\n\r\n //! Remove CMD + Lenght\r\n res.payload = res.payload.substring(12);\r\n\r\n var chg = this.ProtobufParsChallenge(res.payload);\r\n\r\n return (chg.success == true) ? chg : { success: false, errorCode: ChallengeErrorCode.PROTO_ERR };\r\n }\r\n\r\n /**\r\n * Step 2: Challenging device with RndS\r\n * @param chg1 RndS+Enc(RndD)\r\n * @returns Enc(RndS)\r\n */\r\n private async ChallengeWithDevice(chg1: ChallengeMessage): Promise {\r\n var cmd = \"FFF10000002608021A10\" + chg1.rnd + \"2210\" + chg1.challenge;\r\n\r\n var res = await this._transport.Call(cmd);\r\n if (res.success == false)\r\n return res;\r\n\r\n const err = this.CheckIfFailure(res.payload);\r\n if(err.success == false){\r\n MyConsole.Info(\"ChallengeService::ChallengeWithDevice->FAILED\", err);\r\n return err;\r\n }\r\n\r\n if (res.payload.substring(0, 16).toLowerCase().trim() != \"fff1000000360802\") {\r\n MyConsole.Info(\"ChallengeService::ChallengeWithDevice->Bad command or lenght\")\r\n return { success: false, errorCode: ChallengeErrorCode.ERR_CHG3 };\r\n }\r\n\r\n //! Remove CMD + Lenght\r\n res.payload = res.payload.substring(12);\r\n\r\n return this.ProtobufParsChallenge(res.payload);\r\n }\r\n\r\n /**\r\n * Step 1: Get RNDD to start Mutual Authentication\r\n * @returns RNDD\r\n */\r\n private async GetRndDevice(): Promise {\r\n var res = await this._transport.Call(\"FFF1000000020801\");\r\n if (res.success == false)\r\n return { success: false, errorCode: ChallengeErrorCode.ERR_CHG1 };\r\n\r\n const err = this.CheckIfFailure(res.payload);\r\n if(err.success == false){\r\n MyConsole.Info(\"ChallengeService::GetRndDevice->FAILED\", err);\r\n return err;\r\n }\r\n\r\n if (res.payload.substring(0, 16).toLowerCase().trim() != \"fff1000000360801\") {\r\n MyConsole.Info(\"ChallengeService::GetRndDevice->Bad command or lenght\")\r\n return { success: false, errorCode: ChallengeErrorCode.ERR_CHG1 };\r\n }\r\n\r\n //! Remove CMD + Lenght\r\n res.payload = res.payload.substring(12);\r\n\r\n return this.ProtobufParsChallenge(res.payload);\r\n }\r\n\r\n /**\r\n * Check if it is failure message\r\n * @param buf message from device\r\n * @returns success: true if no error\r\n */\r\n private CheckIfFailure(buf: string): ChallengeMessage {\r\n if(buf == null || buf.length < 12){\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.INVALID_HEADER,\r\n }\r\n }\r\n\r\n if(buf.substring(0,4) == \"0003\") {\r\n let reason = buf.substr(14,2);\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.FAILED_WITH_REASON,\r\n payload: reason,\r\n }\r\n }\r\n\r\n return {\r\n success: true,\r\n errorCode: ChallengeErrorCode.NO_ERR,\r\n }\r\n }\r\n\r\n /**\r\n * Send Challenge data to server\r\n * @param toServer Data to be sent\r\n * @param isProduction Is Production API should be called\r\n * @returns Server response\r\n */\r\n private SendToServerChallenge(toServer: ChallengeMessage): Promise {\r\n const header = new HttpHeaders({\"Content-Type\": \"application/json\"});\r\n\r\n return this.http.post(RestUrls.getServerChallenge(),\r\n toServer,\r\n {headers: header}\r\n ).toPromise();\r\n }\r\n\r\n /**\r\n * Protobuf decode helper function\r\n * @param buf protobuf raw data\r\n * @returns ChallengeMessage\r\n */\r\n private ProtobufParsChallenge(buf: string): ChallengeMessage {\r\n let msg: ChallengeMessage = {};\r\n\r\n if (buf.length < 4) {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.PROTO_ERR\r\n };\r\n }\r\n\r\n while (buf.length > 0) {\r\n try {\r\n // CB for control byte\r\n var cb = Number.parseInt(buf.substring(0, 2), 16);\r\n var type = cb & 0x07;\r\n var field = cb >> 3;\r\n\r\n var tmp: string;\r\n var num: number;\r\n\r\n if (type == 0) { // Varint\r\n num = Number.parseInt(buf.substring(2, 4), 16);\r\n buf = buf.substring(4);\r\n }\r\n else if (type == 2) { // Length-delimited\r\n var len = Number.parseInt(buf.substring(2, 4), 16);\r\n tmp = buf.substring(4, 4 + len * 2);\r\n buf = buf.substring(4 + len * 2);\r\n }\r\n else {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.PROTO_ERR\r\n };\r\n }\r\n\r\n if (field == 1) {\r\n msg.regTyp = num;\r\n }\r\n else if (field == 2) {\r\n msg.sn = tmp;\r\n }\r\n else if (field == 3) {\r\n msg.rnd = tmp;\r\n }\r\n else if (field == 4) {\r\n msg.challenge = tmp;\r\n }\r\n else if (field == 5) {\r\n msg.checkHash = tmp;\r\n }\r\n\r\n } catch {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.PROTO_ERR\r\n };\r\n }\r\n\r\n }\r\n\r\n msg.success = true;\r\n\r\n return msg;\r\n }\r\n\r\n /**\r\n * Protobuf decode helper function\r\n * @param buf protobuf raw data\r\n * @returns AuthKeyMessage\r\n */\r\n private ProtobufParsAuthKey(buf: string): AuthKeyMessage {\r\n let msg: AuthKeyMessage = {};\r\n\r\n if (buf.length < 4) {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.PROTO_ERR\r\n };\r\n }\r\n\r\n while (buf.length > 0) {\r\n try {\r\n // CB for control byte\r\n var cb = Number.parseInt(buf.substring(0, 2), 16);\r\n var type = cb & 0x07;\r\n var field = cb >> 3;\r\n\r\n var tmp: string;\r\n var num: number;\r\n\r\n if (type == 0) { // Varint\r\n num = Number.parseInt(buf.substring(2, 4), 16);\r\n buf = buf.substring(4);\r\n }\r\n else if (type == 2) { // Length-delimited\r\n var len = Number.parseInt(buf.substring(2, 4), 16);\r\n tmp = buf.substring(4, 4 + len * 2);\r\n buf = buf.substring(4 + len * 2);\r\n }\r\n else {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.PROTO_ERR\r\n };\r\n }\r\n\r\n if (field == 1) {\r\n msg.keyVersion = num;\r\n }\r\n else if (field == 2) {\r\n msg.sn = tmp;\r\n }\r\n else if (field == 3) {\r\n msg.isOptSet = num == 0 ? false : true;\r\n }\r\n else if (field == 4) {\r\n msg.authKey = tmp;\r\n }\r\n } catch {\r\n return {\r\n success: false,\r\n errorCode: ChallengeErrorCode.PROTO_ERR\r\n };\r\n }\r\n\r\n }\r\n\r\n msg.success = true;\r\n\r\n return msg;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BridgeService } from './bridge.service';\r\nimport { WebusbService } from './webusb.service';\r\nimport { ChallengeMessage } from '../../models/bootloader/ChallengeMessage';\r\nimport { TransportInterface } from '../../models/bootloader/transportInterface';\r\nimport { ChallengeErrorCode } from '../../models/bootloader/ChallengeErrors';\r\n\r\n@Injectable()\r\nexport class TransportService {\r\n\r\n _transport: TransportInterface = null;\r\n //_instance: TransportService = null;\r\n\r\n constructor(private bridge: BridgeService, private webusb: WebusbService) {\r\n }\r\n\r\n public Get(): TransportInterface {\r\n return this._transport;\r\n }\r\n\r\n public async Init(): Promise {\r\n if (this._transport == null) {\r\n //! Checking the existance of Bridge\r\n //var res = await this.bridge.GetVersion();\r\n //if (res.success) {\r\n //this._transport = this.bridge;\r\n //return { success: true, payload: this.bridge };\r\n //}\r\n\r\n //! Checking the existance of WebUSB\r\n var res = await this.webusb.GetVersion();\r\n if (res.success) {\r\n this._transport = this.webusb;\r\n return { success: true, payload: this.webusb };\r\n }\r\n\r\n return { success: false, errorCode: ChallengeErrorCode.NO_TRANSPORT };\r\n }\r\n\r\n return { success: true, payload: this._transport };\r\n }\r\n}\r\n"," /// \r\nimport { Injectable } from '@angular/core';\r\n\r\n\r\nimport { TransportInterface } from '../../models/bootloader/transportInterface';\r\nimport { ChallengeMessage } from '../../models/bootloader/ChallengeMessage';\r\nimport { ChallengeErrorCode } from '../../models/bootloader/ChallengeErrors';\r\n\r\n@Injectable()\r\nexport class WebusbService implements TransportInterface {\r\n\r\n kind: string = \"webusb\";\r\n\r\n prokeyFilters = [\r\n { vendorId: 0x1364, productId: 0x0001 },\r\n { vendorId: 0x1209, productId: 0xAAAA }\r\n ];\r\n\r\n _usb: any;\r\n _port: any;\r\n constructor() {\r\n this._usb = navigator.usb;\r\n }\r\n\r\n public async Connect(): Promise {\r\n if (this._usb != undefined && this._usb.opened) {\r\n return { success: true };\r\n }\r\n\r\n var chg = await this._enumerate();\r\n if (chg.success == false)\r\n return chg;\r\n\r\n return await this._acquire();\r\n }\r\n\r\n public async Call(data: string): Promise {\r\n if (this._port === undefined || this._port == null) {\r\n return { success: false, errorCode: ChallengeErrorCode.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n var bMsg = this.HexStringToByteArray(data);\r\n let l = bMsg.length;\r\n let bDataToSend = new Uint8Array(64);\r\n var firstPacket = true;\r\n var n = 0;\r\n var t = 0;\r\n\r\n while (t < l) {\r\n n = 0;\r\n if (firstPacket) {\r\n firstPacket = false;\r\n bDataToSend[n++] = 0x3F;\r\n bDataToSend[n++] = 0x23;\r\n bDataToSend[n++] = 0x23;\r\n }\r\n else {\r\n bDataToSend[n++] = 0x3F;\r\n }\r\n\r\n while (n < 64) {\r\n if (t < l) {\r\n bDataToSend[n++] = bMsg[t++];\r\n }\r\n else\r\n bDataToSend[n++] = 0x00; // Padding\r\n }\r\n\r\n await this._port.transferOut(1, bDataToSend);\r\n }\r\n\r\n let recStr: string = \"\";\r\n var len = 0;\r\n firstPacket = true;\r\n var isValid = true;\r\n\r\n while (true) {\r\n const res = await this._port.transferIn(1, 64);\r\n\r\n if (res.status == \"stall\") {\r\n this._port.clearHalt(\"in\", 1);\r\n continue;\r\n }\r\n\r\n if (res.data && res.data.byteLength === 0) {\r\n await this.delay(10);\r\n continue;\r\n }\r\n\r\n // TODO: Handle babble status\r\n //if (res.status == \"babble\") //! still have more data\r\n //continue;\r\n\r\n if (firstPacket) {\r\n firstPacket = false;\r\n\r\n var uint8View = new Uint8Array(res.data.buffer);\r\n len = uint8View[5] << 24;\r\n len |= uint8View[6] << 16;\r\n len |= uint8View[7] << 8;\r\n len |= uint8View[8];\r\n\r\n var rawStr: string = Buffer.from(res.data.buffer).toString('hex');\r\n\r\n // validate start bytes\r\n if (rawStr.substring(0, 6).toLowerCase() != '3f2323')\r\n isValid = false; //! Can not return err now because, maybe there are IN data in USB buffer\r\n\r\n //! Remove '?##\" characters from data\r\n recStr = rawStr.substring(6);\r\n\r\n //! In the first packet, the lenght of data can be up to 55 bytes\r\n len -= 55;\r\n }\r\n else {\r\n\r\n var rawStr: string = Buffer.from(res.data.buffer).toString('hex');\r\n\r\n // validate start byte\r\n if (rawStr.substring(0, 2).toLowerCase() != '3f')\r\n isValid = false;\r\n\r\n //! Remove '?' characted from data\r\n recStr += rawStr.substring(2);\r\n\r\n //! In the other packets, the lenght of data can be up to 63 bytes\r\n len -= 63;\r\n }\r\n\r\n if (len > 0) //! still have more data\r\n continue;\r\n\r\n if (isValid)\r\n return { success: true, payload: recStr };\r\n else\r\n return { success: false, errorCode: ChallengeErrorCode.PROTO_ERR }\r\n }\r\n\r\n }\r\n\r\n async delay(ms: number): Promise {\r\n await new Promise(resolve => setTimeout(() => resolve(null), ms)).then(() => console.log(\"fired\"));\r\n }\r\n\r\n public async Release(): Promise {\r\n //if (this._port === undefined || this._port == null) {\r\n // return { success: false, errorCode: ChallengeErrorCode.USER_DID_NOT_SELECT_A_DEVICE };\r\n //}\r\n\r\n //await this._port.close();\r\n\r\n return { success: true };\r\n }\r\n\r\n public async Reset(): Promise {\r\n return this.Release();\r\n }\r\n\r\n private HexStringToByteArray(data: string): Uint8Array {\r\n var b = new Uint8Array(data.length / 2);\r\n var n = 0;\r\n while (data.length > 0) {\r\n b[n] = Number.parseInt(data.substring(0, 2), 16);\r\n n++;\r\n data = data.substring(2);\r\n }\r\n\r\n return b;\r\n }\r\n\r\n public async GetVersion(): Promise {\r\n if (this._usb === undefined || this._usb == null) {\r\n return { success: false, errorCode: ChallengeErrorCode.NO_WEB_USB };\r\n }\r\n\r\n return { success: true, payload: \"1.0.0\" }\r\n }\r\n\r\n private async _enumerate(): Promise {\r\n if (this._usb === undefined || this._usb == null) {\r\n return { success: false, errorCode: ChallengeErrorCode.NO_WEB_USB };\r\n }\r\n\r\n // TODO: Handle more than one device \r\n let devices = await this._usb.getDevices();\r\n if (devices != undefined && devices.length > 0) {\r\n for (let i = 0; i < devices.length; i++) {\r\n var device = devices[i];\r\n\r\n this.prokeyFilters.forEach(filter => {\r\n if(device.vendorId == filter.vendorId && device.productId == filter.productId){\r\n this._port = device;\r\n return { success: true, payload: device }\r\n }\r\n });\r\n }\r\n }\r\n\r\n try {\r\n let device = await this._usb.requestDevice({ filters: this.prokeyFilters });\r\n if (device == null) {\r\n return { success: false, errorCode: ChallengeErrorCode.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n this._port = device;\r\n\r\n return { success: true, payload: device }\r\n }\r\n catch { // To handle DOMException\r\n return { success: false, errorCode: ChallengeErrorCode.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n\r\n /*await this._usb.requestDevice({ filters: this.filters }).then(\r\n (device) => {\r\n this._port = device;\r\n console.log(this._port);\r\n\r\n return { success: true, payload: this._port };\r\n }\r\n ).catch((reason) => {\r\n console.log(\"Catch on request device: \" + reason);\r\n return { success: false, errorCode: ChallengeErrorCode.NO_DEVICE };\r\n });*/\r\n }\r\n\r\n private async _acquire(): Promise {\r\n if (this._port === undefined || this._port == null) {\r\n return { success: false, errorCode: ChallengeErrorCode.USER_DID_NOT_SELECT_A_DEVICE };\r\n }\r\n\r\n try {\r\n await this._port.open();\r\n\r\n if (this._port.configuration === null)\r\n await this._port.selectConfiguration(1);\r\n\r\n await this._port.claimInterface(0);\r\n\r\n return { success: true };\r\n }\r\n catch {\r\n return { success: false, errorCode: ChallengeErrorCode.CAN_NOT_OPEN_USB };\r\n }\r\n }\r\n\r\n\r\n\r\n}\r\n","import {catchError} from 'rxjs/operators';\r\nimport {Injectable} from '@angular/core';\r\nimport {HttpClient, HttpErrorResponse, HttpParams} from '@angular/common/http';\r\nimport {EMPTY, Observable, throwError} from 'rxjs';\r\nimport {ProkeySettingsService} from \"./prokey-settings.service\";\r\nimport { AccountBrief } from '@core/models/connect/account-brief';\r\nimport { CoinModel } from '@core/models/connect/coin-model';\r\nimport { CoinUnitPipe } from '@shared/pipes/coin-unit.pipe';\r\nimport { AssetInfo, CoinMarketStatus } from '@core/models/connect/asset-info';\r\n\r\n@Injectable()\r\nexport class CoinMarketService {\r\n\r\n\r\n //#region Private members \r\n \r\n private _apiUrl = 'https://api.coingecko.com/api/v3';\r\n private _lastPrice: any;\r\n private _lastPriceFetchTime: Date = new Date();\r\n private _coin: CoinModel;\r\n \r\n //#endregion\r\n\r\n constructor(private http: HttpClient,\r\n private _unitPipe: CoinUnitPipe, \r\n private _settingsService: ProkeySettingsService) {\r\n //! Initial time to yesterday\r\n this.ResetFetchTime();\r\n }\r\n\r\n //#region public methods\r\n\r\n ResetFetchTime(){\r\n this._lastPriceFetchTime.setDate(this._lastPriceFetchTime.getDate() - 1);\r\n }\r\n\r\n getCurrencies(): Observable {\r\n return this.http.get(`${this._apiUrl}/simple/supported_vs_currencies`);\r\n }\r\n\r\n getCurrentCurrency(): string {\r\n const settings = this._settingsService.getAll();\r\n if (settings?.displayCurrency) {\r\n return settings.displayCurrency;\r\n } else {\r\n this._settingsService.patch({displayCurrency: 'USD', displayCoin: 'BTC', bitcoreServers: '', explorerUrl: ''});\r\n return 'USD';\r\n }\r\n }\r\n\r\n getSimplePrice(coinId: string, currency: string): Observable {\r\n\r\n const secondsPassedFromLastCall = (new Date().getTime() - this._lastPriceFetchTime.getTime()) / 1000;\r\n //! fetch/update the price rate every 3 minutes\r\n if(this._lastPrice != null && secondsPassedFromLastCall < 180 ){\r\n return this._lastPrice;\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('ids', coinId)\r\n .set('vs_currencies', currency)\r\n .set('include_24hr_vol', 'false')\r\n .set('include_market_cap', 'false')\r\n .set('include_24hr_change', 'false')\r\n .set('include_last_updated_at', 'false');\r\n\r\n this._lastPrice = this.http.get(`${this._apiUrl}/simple/price`, {\r\n params: params\r\n }).pipe(catchError((err: HttpErrorResponse) => {\r\n return EMPTY;\r\n }));\r\n\r\n this._lastPriceFetchTime = new Date();\r\n\r\n return this._lastPrice;\r\n }\r\n\r\n getMarketChart(coinId: string, days: number) {\r\n const params = new HttpParams()\r\n .set('vs_currency', this.getCurrentCurrency())\r\n .set('days', days.toString());\r\n //.set('interval', 'daily');\r\n return this.http.get(`${this._apiUrl}/coins/${coinId}/market_chart`, {\r\n params: params\r\n }).pipe(catchError((err: HttpErrorResponse) => {\r\n return throwError(\"can't use market price\");\r\n }));\r\n }\r\n\r\n setCoinMarket(currentCoin: CoinModel) : Promise {\r\n\r\n return new Promise((resolve, reject) => {\r\n \r\n if (currentCoin == null) {\r\n return reject();\r\n }\r\n\r\n let currency = this.getCurrentCurrency();\r\n let coinId = currentCoin.coinInfo.name.toCoinId();\r\n let coinShortcut = currentCoin.coinInfo.shortcut.toLocaleLowerCase();\r\n\r\n if (currentCoin.coinInfo.shortcut === 'TEST' || currentCoin.coinInfo.name === 'Testnet') {\r\n coinId = 'bitcoin';\r\n coinShortcut = 'btc';\r\n }\r\n\r\n this._getMarketPrice(coinId, currency, '24h', '7d', '30d').subscribe({\r\n next: (result) => {\r\n if (result) {\r\n currentCoin.marketData = result.find(x => x.symbol === coinShortcut);\r\n currentCoin.isAvailableMarketData = true;\r\n } else {\r\n currentCoin.isAvailableMarketData = false;\r\n }\r\n\r\n this._coin = currentCoin;\r\n return resolve();\r\n },\r\n error: () => {\r\n return resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n setBalancePrice(accountBreif: AccountBrief) {\r\n if(this._coin == null) {\r\n return;\r\n }\r\n\r\n if (this._coin.isAvailableMarketData) {\r\n accountBreif.balancePrice = this._getBalancePrice(accountBreif.balance);\r\n }\r\n }\r\n\r\n setAssetsMarketPrice(assets: AssetInfo[], currency: string): Promise {\r\n return new Promise((resolve) => {\r\n let changePercentageAverage = 0;\r\n let marketResult = [];\r\n let coinIds = assets.map(x => x.coinId).join();\r\n \r\n this._getMarketPrice(coinIds, currency, '24h', '7d', '30d').subscribe({\r\n next: (result) => {\r\n marketResult = result;\r\n if (marketResult) {\r\n for (let asset of assets) {\r\n const marketPrice = marketResult.find(x => x.id == asset.coinId);\r\n if (marketPrice) {\r\n asset.coinPrice = marketPrice.current_price;\r\n asset.isLoadedPrice = true;\r\n \r\n asset.priceChangeMap = new Map();\r\n asset.priceChangeMap.set('Day', marketPrice.price_change_percentage_24h_in_currency);\r\n asset.priceChangeMap.set('Week', marketPrice.price_change_percentage_7d_in_currency);\r\n asset.priceChangeMap.set('Month', marketPrice.price_change_percentage_30d_in_currency);\r\n \r\n asset.priceChangePercentage = marketPrice.price_change_percentage_30d_in_currency;\r\n asset.coinMarketChangeStatus = asset.priceChangePercentage < 0.00000 ? CoinMarketStatus.Negative : CoinMarketStatus.Positive; \r\n }\r\n }\r\n \r\n let changeArray = assets.filter(x => x.priceChangePercentage != null).map(x => x.priceChangePercentage);\r\n changePercentageAverage = this.getAverage(changeArray);\r\n \r\n }\r\n return resolve(changePercentageAverage);\r\n },\r\n error: () => {\r\n return resolve(changePercentageAverage);\r\n },\r\n complete: () => {\r\n },\r\n });\r\n });\r\n }\r\n\r\n setAssetTotalPrice(asset: AssetInfo) {\r\n if (asset.coinPrice) {\r\n const realBalance = this._unitPipe.transform(asset.totalBalance, asset.coin.coinInfo.decimals);\r\n asset.totalBalancePrice = realBalance * asset.coinPrice;\r\n }\r\n asset.isLoadedPrice = true;\r\n }\r\n \r\n setAssetMarketChart(asset: AssetInfo, maxDays: number): Promise {\r\n return new Promise((resolve) => {\r\n let realBalance = this._unitPipe.transform(asset.totalBalance, asset.coin.coinInfo.decimals);\r\n \r\n this.getMarketChart(asset.coinId, maxDays).subscribe({ \r\n next: (result) => {\r\n asset.marketPrices = result['prices'];\r\n\r\n for(let item of asset.marketPrices) {\r\n let currentCoinPrice = item[item.length - 1];\r\n item[item.length - 1] = realBalance * currentCoinPrice;\r\n }\r\n return resolve(true);\r\n },\r\n error: () => {\r\n return resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n\r\n getAverage(array: number[]): number {\r\n let avg = null;\r\n const average = array => array.reduce((a, b) => a + b) / array.length;\r\n\r\n if (array.length > 0) {\r\n avg = average(array);\r\n }\r\n\r\n return avg;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Private methods\r\n\r\n private _getMarketPrice(coinId: string, currency: string, ...price_change_percentage: string[]) {\r\n let percentageParams = '';\r\n for (const day of price_change_percentage) {\r\n percentageParams += `${day},`;\r\n }\r\n percentageParams = percentageParams.substr(0, percentageParams.length - 1);\r\n const params = new HttpParams()\r\n .set('ids', coinId)\r\n .set('vs_currency', currency)\r\n .set('sparkline', 'false')\r\n .set('price_change_percentage', percentageParams);\r\n return this.http.get(`${this._apiUrl}/coins/markets`, {\r\n params: params\r\n }).pipe(catchError((err: HttpErrorResponse) => {\r\n return throwError(\"can't use market price\");\r\n }));\r\n }\r\n\r\n private _getBalancePrice(balance: number) {\r\n if (this._coin.marketData) {\r\n const coinPrice: number = this._coin.marketData.current_price;\r\n const realBalance = this._unitPipe.transform(balance, this._coin.coinInfo.decimals);\r\n return realBalance * coinPrice;\r\n }\r\n return null;\r\n }\r\n\r\n //#endregion\r\n\r\n}","import {AccountInfo} from \"@core/models/connect/account-info\";\r\nimport {BaseOutput} from \"@core/models/connect/base-output\";\r\nimport {CoinModel} from \"@core/models/connect/coin-model\";\r\nimport {AccountBrief} from \"@core/models/connect/account-brief\";\r\nimport {Transaction} from \"@core/models/connect/transaction\";\r\nimport {CoinBaseType} from \"@webcore/coins/CoinInfo\";\r\nimport {Device} from \"@webcore/device/Device\";\r\nimport {AddressModel, PublicKey} from \"@webcore/models/Prokey\";\r\nimport {BitcoinWallet} from \"@webcore/wallet/BitcoinWallet\";\r\nimport {Wallet} from \"./wallet\";\r\nimport * as PathUtil from \"@webcore/utils/pathUtils\";\r\nimport {BitcoinBaseCoinInfoModel} from \"@webcore/models/CoinInfoModel\";\r\nimport {BitcoinAccountInfo, BitcoinTransactionView, BitcoinWalletModel} from \"@webcore/models/BitcoinWalletModel\";\r\nimport {TransactionType} from \"@core/models/connect/transaction-type.enum\";\r\nimport {TransactionTarget} from \"@core/models/connect/transaction-target\";\r\nimport * as GenericWalletModel from '@webcore/models/GenericWalletModel';\r\n\r\nexport class Bitcoin extends Wallet {\r\n\r\n private _fullDiscoveredWallet: BitcoinWalletModel = null;\r\n\r\n /**\r\n * Bitcoin Wallet.\r\n */\r\n constructor(device: Device, coinModel: CoinModel) {\r\n super(device, coinModel);\r\n this._webcoreBaseWallet = new BitcoinWallet(this._device, coinModel.coinInfo.name);\r\n }\r\n\r\n /**\r\n * Get count of accounts, -1 means no account at all\r\n * @returns\r\n */\r\n get AccountsCount(): number {\r\n if(this._fullDiscoveredWallet == null) {\r\n return -1;\r\n }\r\n return this._fullDiscoveredWallet.accounts.length;\r\n }\r\n\r\n /**\r\n * Delete previous account data and ...\r\n * This function should be called when user wants to refresh the wallet\r\n */\r\n ClearCache(): void {\r\n this._currentAccountIndex = 0;\r\n this._isAccountDiscoveryFinished = false;\r\n this._fullDiscoveredWallet = null;\r\n this._isNewAccountAlreadyAdded = false;\r\n this.NeedToReSync = false;\r\n }\r\n\r\n /**\r\n * Start discovering wallet accounts\r\n * To get account and wallet info, you need to call getAccountInfo\r\n * If all accounts have been already discovered, this function will resolve using previous data immadiatly\r\n * To have a refresh account discovery, Call ClearCache first\r\n * @param updateCallBack Inform upper later that an account has discovered.\r\n * @returns\r\n */\r\n async StartAccountDiscovery(onNewAccountCallBack: (discoveredAccountNumber: number) => void): Promise {\r\n return new Promise((resolve, reject)=>{\r\n\r\n //! Return previous discovered data if any\r\n if(this._fullDiscoveredWallet) {\r\n if(onNewAccountCallBack) {\r\n this._fullDiscoveredWallet.accounts.forEach(acc => {\r\n onNewAccountCallBack(acc.accountIndex);\r\n });\r\n }\r\n\r\n this._isAccountDiscoveryFinished = true;\r\n return resolve();\r\n } else {\r\n this._fullDiscoveredWallet = \r\n {\r\n totalBalance: 0,\r\n accounts: [],\r\n };\r\n }\r\n\r\n //! Start discovery\r\n try {\r\n (this._webcoreBaseWallet as BitcoinWallet).StartDiscovery((accInfo) => {\r\n\r\n //! Add discovered account\r\n this._fullDiscoveredWallet.accounts.push(accInfo);\r\n\r\n if (onNewAccountCallBack) {\r\n onNewAccountCallBack(accInfo.accountIndex);\r\n }\r\n }).then((bitcoinWalletModel: BitcoinWalletModel) => {\r\n // Account discovery is done\r\n this._fullDiscoveredWallet.totalBalance = bitcoinWalletModel.totalBalance;\r\n this._totalBalance = this._fullDiscoveredWallet.totalBalance;\r\n this._isAccountDiscoveryFinished = true;\r\n\r\n return resolve();\r\n }).catch(reason => {\r\n this._isAccountDiscoveryFinished = false;\r\n return reject(reason);\r\n });\r\n } catch(e) {\r\n this._isAccountDiscoveryFinished = false;\r\n return reject(e);\r\n }\r\n })\r\n }\r\n\r\n\r\n /**\r\n * To ask if a new account can be added to list of current accounts\r\n * IMPORTANT: To get the currect response, Call this function after account discovery finished\r\n * @returns True means the \"addNewAccount\" func can be called in order to add a new (virtual) account\r\n */\r\n canAddNewAccount(): boolean {\r\n if(this._isAccountDiscoveryFinished == false || this._isNewAccountAlreadyAdded == true) {\r\n return false;\r\n }\r\n\r\n if(this._fullDiscoveredWallet == null || this._fullDiscoveredWallet.accounts == null) {\r\n return false;\r\n }\r\n\r\n if(this._fullDiscoveredWallet.accounts.length == 0) {\r\n return false;\r\n }\r\n\r\n const lastAccount = this._fullDiscoveredWallet.accounts[this._fullDiscoveredWallet.accounts.length - 1];\r\n\r\n return lastAccount.txs > 0;\r\n }\r\n\r\n /**\r\n * Add new account, Call \"canAddNewAccount\" first\r\n * DO NOT CALL THIS FUNCTION DIRECTLY IF YOU WANT EVENTS RISE AFTER ADDING NEW ACCOUNT, So call it through wallet service\r\n * @returns New account index. -1 means fail\r\n */\r\n async _addNewAccount(): Promise {\r\n if(this._fullDiscoveredWallet == null || this._fullDiscoveredWallet.accounts == null) {\r\n return -1;\r\n }\r\n\r\n let newAcc = {\r\n accountIndex: this._fullDiscoveredWallet.accounts.length,\r\n totalReceived: '0',\r\n totalSent:'0',\r\n balance: '0',\r\n txs: 0,\r\n transactions: [],\r\n itemsOnPage: 0,\r\n totalPages: 0,\r\n };\r\n\r\n const pathToFirstAddressOfThisNewAccount = PathUtil.GetBipPath(\r\n CoinBaseType.BitcoinBase,\r\n newAcc.accountIndex,\r\n this.CoinInfo,\r\n false,\r\n 0\r\n )\r\n\r\n // get the first address from device\r\n pathToFirstAddressOfThisNewAccount.address = await this.getAddress(pathToFirstAddressOfThisNewAccount.path, false);\r\n\r\n newAcc.lastUnusedAddress = pathToFirstAddressOfThisNewAccount;\r\n\r\n this._fullDiscoveredWallet.accounts.push(newAcc);\r\n this._isNewAccountAlreadyAdded = true;\r\n\r\n return newAcc.accountIndex;\r\n }\r\n\r\n getWebcoreAccountInfo(accountIndex?: number): BitcoinAccountInfo {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n return this._fullDiscoveredWallet.accounts[ai];\r\n }\r\n\r\n getAccountBrief(accountIndex?: number): AccountBrief {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n const accInfo = this._fullDiscoveredWallet.accounts[ai];\r\n\r\n return {\r\n id: accInfo.accountIndex,\r\n balance: +accInfo.balance,\r\n label: `Account #${accInfo.accountIndex + 1}`,\r\n }\r\n }\r\n\r\n getAccountInfo(accountIndex?: number): AccountInfo {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n\r\n return this._ToAccountInfo(this._fullDiscoveredWallet.accounts[ai]);\r\n }\r\n\r\n getAllAccountsInfo(): AccountInfo[] {\r\n if (this._fullDiscoveredWallet?.accounts?.length > 0) {\r\n return this._fullDiscoveredWallet.accounts.map((account: BitcoinAccountInfo) => {\r\n this._ensureAccountDiscoveryIsDone(account.accountIndex);\r\n return this._ToAccountInfo(account);\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n setCurrentAccount(accountIndex: number): void {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n this._currentAccountIndex = accountIndex;\r\n }\r\n\r\n /**\r\n * This function will return the first path of the first account\r\n * @returns The path of Account 0 Path 0\r\n */\r\n getPathOfFirstAddress(account: number): AddressModel {\r\n return PathUtil.GetBipPath(\r\n CoinBaseType.BitcoinBase,\r\n account,\r\n this._coinModel.coinInfo,\r\n false,\r\n 0\r\n )\r\n }\r\n\r\n async getPublicKey(account: number, showOnProkey: boolean): Promise {\r\n const coinInfo = this._coinModel.coinInfo;\r\n\r\n //! For getting public key, both isChange & addressIndex should not be passed\r\n const path = PathUtil.GetBipPath(CoinBaseType.BitcoinBase, account, coinInfo);\r\n\r\n return await this._webcoreBaseWallet .GetPublicKey(path.path, showOnProkey);\r\n }\r\n\r\n async getAddress(path: number[], showOnProkey: boolean): Promise {\r\n return await this._webcoreBaseWallet .GetAddress(path, showOnProkey);\r\n }\r\n\r\n async getAddresses(accountInfo: AccountInfo): Promise {\r\n let startIndex = 0;\r\n let justPaths : Array> = [];\r\n\r\n // Makinging a list of paths\r\n for(let i=0; i<20; i++) {\r\n let path = PathUtil.GetBipPath(\r\n CoinBaseType.BitcoinBase, // Coin Type\r\n accountInfo.id, // Account Number\r\n this.CoinInfo, // CoinInfo\r\n false, // External chain address\r\n startIndex + i, // address index\r\n );\r\n justPaths.push(path.path);\r\n }\r\n \r\n return this._webcoreBaseWallet.GetAddresses(justPaths);\r\n }\r\n\r\n async signMessage(path: number[], message: string): Promise {\r\n const coinInfo = this._webcoreBaseWallet .GetCoinInfo() as BitcoinBaseCoinInfoModel;\r\n return await this._webcoreBaseWallet .SignMessage(path, message, coinInfo.on_device);\r\n }\r\n\r\n async verifyMessage(address: string, message: string, signature: string): Promise {\r\n const coinInfo = this._webcoreBaseWallet .GetCoinInfo() as BitcoinBaseCoinInfoModel;\r\n return await this._webcoreBaseWallet .VerifyMessage(address, message, signature, coinInfo.on_device);\r\n }\r\n\r\n async prepareSendModel(output: BaseOutput, ...params: any[]) {\r\n return await (this._webcoreBaseWallet as BitcoinWallet).GenerateTransaction([{ Address: output.address, value: +output.amount * 100000000 }], params[0].id, params[1]);\r\n }\r\n\r\n async sendTransaction(model: any): Promise {\r\n let signedTx: any = await this._webcoreBaseWallet.SignTransaction(model);\r\n return await (this._webcoreBaseWallet as BitcoinWallet).SendTransaction(signedTx.serialized_tx);\r\n }\r\n\r\n async calculateTransactionFee(outputValue: BaseOutput, fromAccount: number) {\r\n let txValue = +outputValue.amount;\r\n if (outputValue.amount == undefined || txValue == 0) {\r\n txValue = 546; // Dust\r\n }\r\n\r\n return await (this._webcoreBaseWallet as BitcoinWallet).CalculateTransactionFee([{ Address: outputValue.address, value: txValue }], fromAccount);\r\n }\r\n\r\n async getAccountTransactionsBy(accountNumber: number, startIndex: number, numberOfTransactions: number): Promise {\r\n const transactions: Transaction[] = [];\r\n\r\n let btcTransactions: BitcoinTransactionView[] = [];\r\n try {\r\n btcTransactions = await (this._webcoreBaseWallet as BitcoinWallet).GetTransactionViewList(accountNumber, startIndex, numberOfTransactions);\r\n\r\n if(btcTransactions == null)\r\n return transactions;\r\n\r\n for (const btcTran of btcTransactions) {\r\n const transaction = {};\r\n transaction.targets = [];\r\n transaction.hash = btcTran.hash;\r\n transaction.date = btcTran.date;\r\n transaction.blockNumber = btcTran.blockNumber;\r\n transaction.fee = btcTran.fee;\r\n transaction.isOmni = btcTran.isOmni;\r\n transaction.isValid = true;\r\n if (btcTran.received && btcTran.received.length > 0) {\r\n transaction.type = TransactionType.Received;\r\n for (const rec of btcTran.received) {\r\n transaction.targets.push({ address: rec.address, value: rec.value, status: rec.status });\r\n }\r\n }\r\n\r\n if (btcTran.sent && btcTran.sent.length > 0) {\r\n transaction.type = TransactionType.Sent;\r\n for (const sent of btcTran.sent) {\r\n transaction.targets.push({ address: sent.address, value: sent.value, status: sent.status });\r\n }\r\n }\r\n\r\n transactions.push(transaction);\r\n }\r\n return transactions;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n private _ToAccountInfo(bitcoinAccount: BitcoinAccountInfo): AccountInfo {\r\n const defaultAccount: AccountInfo = {};\r\n\r\n if (bitcoinAccount == null) {\r\n return defaultAccount;\r\n }\r\n\r\n defaultAccount.id = bitcoinAccount.accountIndex;\r\n defaultAccount.balance = +bitcoinAccount.balance;\r\n defaultAccount.lastUnusedAddress = bitcoinAccount.lastUnusedAddress;\r\n\r\n //! We need all addresses for Sign & Verify because we have to check if user is entering a valid wallet address\r\n defaultAccount.allAddresses = bitcoinAccount.addresses;\r\n\r\n defaultAccount.transactions = bitcoinAccount.txs;\r\n defaultAccount.xpub = bitcoinAccount.publicKey?.address ?? \"\";\r\n\r\n return defaultAccount;\r\n }\r\n\r\n private _ensureAccountDiscoveryIsDone(accountIndex?: number) {\r\n if(this._fullDiscoveredWallet == null) {\r\n throw new Error(\"No wallet info, Call AccountDiscovery first\");\r\n }\r\n\r\n if(accountIndex != null && (accountIndex < 0 || accountIndex >= this._fullDiscoveredWallet.accounts.length)) {\r\n throw new Error(\"Account index is out of range\");\r\n }\r\n }\r\n}\r\n","import {Device} from \"@webcore/device/Device\";\r\nimport {CoinModel} from \"@core/models/connect/coin-model\";\r\nimport {Wallet} from \"./wallet\";\r\nimport {EthereumWallet} from \"@webcore/wallet/EthereumWallet\";\r\nimport {CoinBaseType} from \"@webcore/coins/CoinInfo\";\r\nimport {Erc20BaseCoinInfoModel, EthereumBaseCoinInfoModel,} from \"@webcore/models/CoinInfoModel\";\r\nimport {AccountInfo} from \"@core/models/connect/account-info\";\r\nimport {BaseOutput} from \"@core/models/connect/base-output\";\r\nimport {AccountBrief} from \"@core/models/connect/account-brief\";\r\nimport {Transaction} from \"@core/models/connect/transaction\";\r\nimport {AddressModel, EthereumAddress, EthereumSignedTx, PublicKey,} from \"@webcore/models/Prokey\";\r\nimport {MyConsole} from \"@webcore/utils/console\";\r\nimport {EthereumAccountInfo, EthereumTransactionView, EthereumWalletModel,} from \"@webcore/models/EthereumWalletModel\";\r\nimport BigNumber from \"bignumber.js\";\r\nimport {TransactionType} from \"@core/models/connect/transaction-type.enum\";\r\nimport {TransactionTarget} from \"@core/models/connect/transaction-target\";\r\nimport * as PathUtil from \"@webcore/utils/pathUtils\";\r\n\r\nexport class Ethereum extends Wallet {\r\n\r\n private _fullDiscoveredWallet: EthereumWalletModel;\r\n private _defaultAccount: EthereumAccountInfo;\r\n\r\n //Etherem wallet\r\n constructor(\r\n device: Device,\r\n coinModel: CoinModel\r\n ) {\r\n super(device, coinModel);\r\n\r\n //! coinInfo which is the last parameter of new EthereumWallet(..) cointains coinNameOrContractAddress, so coinName/contractAddress is redundant and passed as empty.\r\n this._webcoreBaseWallet = new EthereumWallet(\r\n this._device,\r\n \"\",\r\n coinModel.type == CoinBaseType.ERC20,\r\n coinModel.type == CoinBaseType.ERC20\r\n ? (coinModel.coinInfo as Erc20BaseCoinInfoModel)\r\n : (coinModel.coinInfo as EthereumBaseCoinInfoModel)\r\n );\r\n }\r\n\r\n /**\r\n * Get count of accounts, -1 means no account at all\r\n * @returns\r\n */\r\n get AccountsCount(): number {\r\n if(this._fullDiscoveredWallet == null) {\r\n return -1;\r\n }\r\n return this._fullDiscoveredWallet.accounts.length;\r\n }\r\n\r\n //#region implementation of Wallet methods\r\n\r\n ClearCache(): void {\r\n this._currentAccountIndex = 0;\r\n this._isAccountDiscoveryFinished = false;\r\n this._fullDiscoveredWallet = null;\r\n this._isNewAccountAlreadyAdded = false;\r\n this.NeedToReSync = false;\r\n }\r\n\r\n StartAccountDiscovery(onNewAccountCallBack: (discoveredAccountNumber: number) => void): Promise {\r\n return new Promise((resolve, reject) => {\r\n //! Return previous discovered data if any\r\n if(this._fullDiscoveredWallet) {\r\n if(onNewAccountCallBack) {\r\n this._fullDiscoveredWallet.accounts.forEach(acc => {\r\n onNewAccountCallBack(acc.accountIndex);\r\n });\r\n }\r\n\r\n this._isAccountDiscoveryFinished = true;\r\n return resolve();\r\n } else {\r\n this._fullDiscoveredWallet = \r\n {\r\n totalBalance: 0,\r\n accounts: [],\r\n };\r\n }\r\n\r\n //! Start discovery\r\n try {\r\n (this._webcoreBaseWallet as EthereumWallet).StartDiscovery((accInfo) => {\r\n\r\n //! Add discovered account\r\n this._fullDiscoveredWallet.accounts.push(accInfo);\r\n\r\n if (onNewAccountCallBack) {\r\n onNewAccountCallBack(accInfo.accountIndex);\r\n }\r\n }).then((ethWalletModel: EthereumWalletModel) => {\r\n //! Account discovery is done\r\n this._fullDiscoveredWallet.totalBalance = ethWalletModel.totalBalance;\r\n this._totalBalance = this._fullDiscoveredWallet.totalBalance;\r\n this._isAccountDiscoveryFinished = true;\r\n\r\n return resolve();\r\n }).catch((error) => {\r\n return reject(error);\r\n });\r\n } catch(e) {\r\n this._isAccountDiscoveryFinished = false;\r\n return reject(e);\r\n }\r\n })\r\n }\r\n\r\n canAddNewAccount(): boolean {\r\n if(this._isAccountDiscoveryFinished == false || this._isNewAccountAlreadyAdded == true) {\r\n return false;\r\n }\r\n\r\n if(this._fullDiscoveredWallet == null || this._fullDiscoveredWallet.accounts == null) {\r\n return false;\r\n }\r\n\r\n if(this._fullDiscoveredWallet.accounts.length == 0) {\r\n return false;\r\n }\r\n const lastAccount = this._fullDiscoveredWallet.accounts[this._fullDiscoveredWallet.accounts.length - 1];\r\n if(lastAccount.isDirectQueryFromGeth && +lastAccount.balance > 0)\r\n return true;\r\n \r\n return lastAccount.transactions && lastAccount.transactions.length > 0;\r\n }\r\n\r\n async _addNewAccount(): Promise {\r\n if (this._fullDiscoveredWallet == null || this._fullDiscoveredWallet.accounts == null) {\r\n return -1;\r\n }\r\n\r\n const newAccount: EthereumAccountInfo = {\r\n txs: undefined,\r\n nonce: undefined,\r\n address: undefined,\r\n nonTokenTxs: undefined,\r\n unconfirmedTxs: undefined,\r\n unconfirmedBalance: undefined,\r\n balance: '0',\r\n transactions: [],\r\n accountIndex: this._fullDiscoveredWallet.accounts.length\r\n };\r\n\r\n const pathToFirstAddressOfThisNewAccount = PathUtil.GetBipPath(\r\n CoinBaseType.EthereumBase,\r\n newAccount.accountIndex,\r\n this.CoinInfo,\r\n )\r\n\r\n // set the account address\r\n pathToFirstAddressOfThisNewAccount.address = await this.getAddress(pathToFirstAddressOfThisNewAccount.path, false);\r\n newAccount.addressModel = pathToFirstAddressOfThisNewAccount;\r\n\r\n this._fullDiscoveredWallet.accounts.push(newAccount);\r\n this._isNewAccountAlreadyAdded = true;\r\n\r\n return newAccount.accountIndex;\r\n }\r\n\r\n getWebcoreAccountInfo(accountIndex: number) {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n return this._fullDiscoveredWallet.accounts[ai];\r\n }\r\n\r\n getAccountBrief(accountIndex: number): AccountBrief {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n const accInfo = this._fullDiscoveredWallet.accounts[ai];\r\n\r\n return {\r\n id: accInfo.accountIndex,\r\n balance: +accInfo.balance,\r\n label: `Account #${accInfo.accountIndex + 1}`,\r\n }\r\n }\r\n\r\n setCurrentAccount(accountIndex: number): void {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n this._currentAccountIndex = accountIndex;\r\n }\r\n\r\n getAccountInfo(accountIndex: number): AccountInfo {\r\n const accInfo = this.getWebcoreAccountInfo(accountIndex);\r\n return this._ToAccountInfo(accInfo);\r\n }\r\n\r\n getAllAccountsInfo(): AccountInfo[] {\r\n if (this._fullDiscoveredWallet?.accounts?.length > 0) {\r\n return this._fullDiscoveredWallet.accounts.map((account: EthereumAccountInfo) => {\r\n this._ensureAccountDiscoveryIsDone(account.accountIndex);\r\n return this._ToAccountInfo(account);\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * This function will return the first path of the first account\r\n * @returns The path of Account 0 Path 0\r\n */\r\n getPathOfFirstAddress(account: number): AddressModel {\r\n return PathUtil.GetBipPath(\r\n CoinBaseType.EthereumBase,\r\n account,\r\n this._coinModel.coinInfo,\r\n )\r\n }\r\n\r\n async getPublicKey(account: number, showOnProkey: boolean): Promise {\r\n //? Does'nt ERC20 have public key\r\n if (this._coinModel.type == CoinBaseType.ERC20) {\r\n return null;\r\n }\r\n const coinInfo = this._coinModel.coinInfo;\r\n\r\n //! For getting public key, the account should not be passed\r\n //! to getting ethereum path account have to be 0' in GetBipPath(..), so account is passed as undefinded\r\n const path = PathUtil.GetBipPath(\r\n CoinBaseType.EthereumBase,\r\n undefined,\r\n coinInfo\r\n );\r\n\r\n return await this._webcoreBaseWallet .GetPublicKey(path.path, showOnProkey);\r\n }\r\n\r\n async getAddress(path: number[], showOnProkey: boolean): Promise {\r\n return await this._webcoreBaseWallet.GetAddress(path, showOnProkey);\r\n }\r\n\r\n getAddresses(accountInfo: AccountInfo): Promise {\r\n return this._webcoreBaseWallet.GetAddresses([accountInfo.lastUnusedAddress.path]);\r\n }\r\n\r\n async getAccountInfoByParams(accountBrief: AccountBrief): Promise {\r\n const ethAccount = await (this._webcoreBaseWallet as EthereumWallet).AccountDiscovery(\r\n accountBrief.id\r\n );\r\n\r\n return this._ToAccountInfo(ethAccount);\r\n }\r\n\r\n getDefaultAccount(): AccountInfo {\r\n return this._ToAccountInfo(this._defaultAccount);\r\n }\r\n\r\n signMessage(path: number[], message: string): Promise {\r\n return this._webcoreBaseWallet.SignMessage(path, message);\r\n }\r\n\r\n async verifyMessage(\r\n address: string,\r\n message: string,\r\n signature: string\r\n ): Promise {\r\n return await this._webcoreBaseWallet .VerifyMessage(address, message, signature);\r\n }\r\n\r\n async prepareSendModel(output: BaseOutput, ...params: any[]) {\r\n let amount: BigNumber = new BigNumber(+output.amount);\r\n //! Amount to wei\r\n amount = amount.multipliedBy(\r\n Math.pow(10, this._coinModel.coinInfo.decimals)\r\n );\r\n\r\n return await (this._webcoreBaseWallet as EthereumWallet).GenerateTransaction(\r\n output.address,\r\n amount,\r\n params[0].id\r\n );\r\n }\r\n\r\n async sendTransaction(tx: any): Promise {\r\n let signedTx = (await this._webcoreBaseWallet .SignTransaction(tx)) as EthereumSignedTx;\r\n return await (this._webcoreBaseWallet as EthereumWallet).PrepareAndSendTransaction(\r\n tx,\r\n signedTx\r\n );\r\n }\r\n\r\n async calculateTransactionFee(outputValue: BaseOutput, fromAccount: number) {\r\n if (this._coinModel.type == CoinBaseType.ERC20) {\r\n return null;\r\n } else {\r\n return await (this._webcoreBaseWallet as EthereumWallet).CalculateTransactionFee();\r\n }\r\n }\r\n\r\n async getAccountTransactionsBy(\r\n accountNumber: number,\r\n startIndex: number,\r\n numberOfTransactions: number\r\n ): Promise {\r\n let transactions: Transaction[] = [];\r\n let ethTransactions: EthereumTransactionView[] = [];\r\n try {\r\n ethTransactions = await (\r\n this._webcoreBaseWallet as EthereumWallet\r\n ).GetTransactionViewList(accountNumber, startIndex, numberOfTransactions);\r\n MyConsole.Info(\"Loaded transaction:\", ethTransactions);\r\n\r\n if (ethTransactions) {\r\n if (ethTransactions.length > 0) {\r\n for (let ethTran of ethTransactions) {\r\n let transaction = {};\r\n transaction.targets = [];\r\n transaction.hash = ethTran.hash;\r\n transaction.date = ethTran.date;\r\n transaction.blockNumber = ethTran.blockNumber;\r\n transaction.fee = ethTran.fee;\r\n transaction.isValid = true;\r\n\r\n transaction.value = ethTran.amount;\r\n\r\n if (ethTran.status == \"RECEIVED\") {\r\n transaction.type = TransactionType.Received;\r\n transaction.targets.push({\r\n address: ethTran.received,\r\n value: ethTran.amount,\r\n status: ethTran.status,\r\n });\r\n } else if (ethTran.status == \"SENT\") {\r\n transaction.type = TransactionType.Sent;\r\n transaction.targets.push({\r\n address: ethTran.sent,\r\n value: ethTran.amount,\r\n status: ethTran.status,\r\n });\r\n }\r\n\r\n transactions.push(transaction);\r\n }\r\n }\r\n }\r\n MyConsole.Info(\"TRANSACTIONS : \", transactions);\r\n return transactions;\r\n } catch (e) {\r\n MyConsole.Exception(\"Ethereum::getAccountTransactionsBy\", e);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Private Mehtods\r\n private _ToAccountInfo(ethAccount: EthereumAccountInfo): AccountInfo {\r\n const defaultAccount: AccountInfo = {};\r\n\r\n if (ethAccount == null) {\r\n return defaultAccount;\r\n }\r\n\r\n defaultAccount.id = ethAccount.accountIndex;\r\n defaultAccount.balance = +ethAccount.balance;\r\n defaultAccount.lastUnusedAddress = ethAccount.addressModel;\r\n\r\n defaultAccount.hasAccountPerEachAddress = true;\r\n defaultAccount.isDirectQueryFromGeth = ethAccount.isDirectQueryFromGeth;\r\n defaultAccount.allAddresses = [ethAccount.addressModel];\r\n defaultAccount.transactions = ethAccount.txs\r\n\r\n return defaultAccount;\r\n }\r\n\r\n private _ensureAccountDiscoveryIsDone(accountIndex?: number) {\r\n if(this._fullDiscoveredWallet == null) {\r\n throw new Error(\"No wallet info, Call AccountDiscovery first\");\r\n }\r\n\r\n if(accountIndex != null && (accountIndex < 0 || accountIndex >= this._fullDiscoveredWallet.accounts.length)) {\r\n throw new Error(\"Account index is out of range\");\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import {AccountBrief} from \"@core/models/connect/account-brief\";\r\nimport {AccountInfo} from \"@core/models/connect/account-info\";\r\nimport {BaseOutput} from \"@core/models/connect/base-output\";\r\nimport {CoinModel} from \"@core/models/connect/coin-model\";\r\nimport {Transaction} from \"@core/models/connect/transaction\";\r\nimport {Device} from \"@webcore/device/Device\";\r\nimport {Wallet} from \"./wallet\";\r\nimport {OmniWallet} from '@webcore/wallet/OmniWallet';\r\nimport {OmniCoinInfoModel} from \"@webcore/models/CoinInfoModel\";\r\nimport {AddressModel, SignedTx} from \"@webcore/models/Prokey\";\r\nimport {OmniAccountInfo, OmniTransactionView, OmniWalletModel} from \"@webcore/models/OmniWalletModel\";\r\nimport {MyConsole} from \"@webcore/utils/console\";\r\nimport {TransactionType} from \"@core/models/connect/transaction-type.enum\";\r\nimport {TransactionTarget} from \"@core/models/connect/transaction-target\";\r\nimport * as PathUtil from \"@webcore/utils/pathUtils\";\r\nimport {CoinBaseType} from \"@webcore/coins/CoinInfo\";\r\nimport {ExtraId} from \"@core/models/connect/extra-id\";\r\n\r\nexport class Omni extends Wallet {\r\n _fullDiscoveredWallet: OmniWalletModel;\r\n _defaultAccount: OmniAccountInfo;\r\n\r\n constructor(device: Device, coinModel: CoinModel) {\r\n super(device, coinModel);\r\n this._webcoreBaseWallet = new OmniWallet(device, coinModel.coinInfo.name, (coinModel.coinInfo as OmniCoinInfoModel).proparty_id);\r\n }\r\n\r\n /**\r\n * Get count of accounts, -1 means no account at all\r\n * @returns\r\n */\r\n get AccountsCount(): number {\r\n if (this._fullDiscoveredWallet == null) {\r\n return -1;\r\n }\r\n return this._fullDiscoveredWallet.accounts.length;\r\n }\r\n\r\n ClearCache(): void {\r\n this._currentAccountIndex = 0;\r\n this._isAccountDiscoveryFinished = false;\r\n this._fullDiscoveredWallet = null;\r\n this._isNewAccountAlreadyAdded = false;\r\n this.NeedToReSync = false;\r\n }\r\n\r\n StartAccountDiscovery(onNewAccountCallBack: (discoveredAccountNumber: number) => void): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this._fullDiscoveredWallet) {\r\n if (onNewAccountCallBack) {\r\n this._fullDiscoveredWallet.accounts.forEach(acc => {\r\n onNewAccountCallBack(acc.accountIndex);\r\n });\r\n }\r\n\r\n this._isAccountDiscoveryFinished = true;\r\n return resolve();\r\n }\r\n this._fullDiscoveredWallet = {\r\n totalBalance: 0,\r\n accounts: [],\r\n };\r\n try {\r\n (this._webcoreBaseWallet as OmniWallet).StartDiscovery(accountInfo => {\r\n this._fullDiscoveredWallet.accounts.push(accountInfo);\r\n\r\n if (onNewAccountCallBack) {\r\n onNewAccountCallBack(accountInfo.accountIndex);\r\n }\r\n }).then((wallet: OmniWalletModel) => {\r\n this._fullDiscoveredWallet.totalBalance = wallet.totalBalance;\r\n this._totalBalance = wallet.totalBalance;\r\n this._isAccountDiscoveryFinished = true;\r\n return resolve();\r\n });\r\n } catch (e) {\r\n this._isAccountDiscoveryFinished = false;\r\n return reject(e);\r\n }\r\n });\r\n }\r\n\r\n canAddNewAccount(): boolean {\r\n if (this._isAccountDiscoveryFinished == false || this._isNewAccountAlreadyAdded == true) {\r\n return false;\r\n }\r\n\r\n if (this._fullDiscoveredWallet == null || this._fullDiscoveredWallet.accounts == null) {\r\n return false;\r\n }\r\n\r\n if (this._fullDiscoveredWallet.accounts.length == 0) {\r\n return false;\r\n }\r\n\r\n const lastAccount = this._fullDiscoveredWallet.accounts[this._fullDiscoveredWallet.accounts.length - 1];\r\n return lastAccount.transactions && lastAccount.transactions.length > 0;\r\n }\r\n\r\n async _addNewAccount(): Promise {\r\n if (this._fullDiscoveredWallet == null || this._fullDiscoveredWallet.accounts == null) {\r\n return -1;\r\n }\r\n\r\n let newAccount: OmniAccountInfo = {\r\n accountIndex: this._fullDiscoveredWallet.accounts.length,\r\n balance: 0,\r\n transactions: [],\r\n }\r\n\r\n const pathToFirstAddressOfThisNewAccount = PathUtil.GetBipPath(\r\n CoinBaseType.OMNI,\r\n newAccount.accountIndex,\r\n this.CoinInfo\r\n )\r\n\r\n // set the account address\r\n pathToFirstAddressOfThisNewAccount.address = await this.getAddress(pathToFirstAddressOfThisNewAccount.path, false);\r\n newAccount.addressModel = pathToFirstAddressOfThisNewAccount;\r\n\r\n this._fullDiscoveredWallet.accounts.push(newAccount);\r\n this._isNewAccountAlreadyAdded = true;\r\n\r\n\r\n return newAccount.accountIndex;\r\n }\r\n\r\n getWebcoreAccountInfo(accountIndex: number) {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n return this._fullDiscoveredWallet.accounts[ai];\r\n }\r\n\r\n getAccountBrief(accountIndex: number): AccountBrief {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n const accInfo = this._fullDiscoveredWallet.accounts[ai];\r\n\r\n return {\r\n id: accInfo.accountIndex,\r\n balance: accInfo.balance,\r\n label: `Account #${accInfo.accountIndex + 1}`,\r\n }\r\n }\r\n\r\n getAccountInfo(accountIndex: number): AccountInfo {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n\r\n return this._ToAccountInfo(this._fullDiscoveredWallet.accounts[ai]);\r\n }\r\n\r\n setCurrentAccount(accountIndex: number): void {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n this._currentAccountIndex = accountIndex;\r\n }\r\n\r\n getPublicKey(account: number, showOnProkey: boolean): Promise {\r\n //! No public key\r\n return null;\r\n }\r\n\r\n async getAddress(path: number[], showOnProkey: boolean): Promise {\r\n return await this._webcoreBaseWallet.GetAddress(path, showOnProkey);\r\n }\r\n\r\n async getAddresses(accountInfo: AccountInfo): Promise {\r\n return this._webcoreBaseWallet.GetAddress(accountInfo.lastUnusedAddress.path);\r\n }\r\n\r\n getAllAccountsInfo(): AccountInfo[] {\r\n if (this._fullDiscoveredWallet?.accounts?.length > 0) {\r\n return this._fullDiscoveredWallet.accounts.map((account: OmniAccountInfo) => {\r\n this._ensureAccountDiscoveryIsDone(account.accountIndex);\r\n return this._ToAccountInfo(account);\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n\r\n async getAccountInfoByParams(accountBrief: AccountBrief): Promise {\r\n const omniAccount = await (this._webcoreBaseWallet as OmniWallet).AccountDiscovery(accountBrief.id);\r\n return this._ToAccountInfo(omniAccount);\r\n }\r\n\r\n getDefaultAccount(): AccountInfo {\r\n return this._ToAccountInfo(this._defaultAccount);\r\n }\r\n\r\n async signMessage(path: number[], message: string): Promise {\r\n return await this._webcoreBaseWallet.SignMessage(path, message);\r\n }\r\n\r\n async verifyMessage(address: string, message: string, signature: string): Promise {\r\n return await this._webcoreBaseWallet.VerifyMessage(address, message, signature);\r\n }\r\n\r\n async prepareSendModel(output: BaseOutput, ...params: any[]) {\r\n let accountNumber = params[0].id;\r\n let selectedFee = params[1];\r\n\r\n // Decimal Factor\r\n // for divisible coins or tokens, the value in this field is to be divided by 100,000,000\r\n // for indivisible coins or tokens, the value in this field is the integer number of Omni Protocol coins or tokens (e.g. 1 represents 1 indivisible token)\r\n const decimalFactor = ((this._webcoreBaseWallet.GetCoinInfo() as OmniCoinInfoModel).divisible == true) ? 100000000 : 1;\r\n\r\n return await (this._webcoreBaseWallet as OmniWallet).GenerateTransaction(output.address, +output.amount * decimalFactor, accountNumber, selectedFee);\r\n\r\n }\r\n\r\n async sendTransaction(model: any): Promise {\r\n let signedTx: any = await this._webcoreBaseWallet.SignTransaction(model);\r\n return await (this._webcoreBaseWallet as OmniWallet).SendTransaction(signedTx.serialized_tx);\r\n }\r\n\r\n async handleSendResult(payload: any): Promise {\r\n let signedTx: SignedTx = payload;\r\n return signedTx;\r\n }\r\n\r\n async calculateTransactionFee(outputValue: BaseOutput, fromAccount: number) {\r\n return await (this._webcoreBaseWallet as OmniWallet).CalculateTransactionFee();\r\n }\r\n\r\n async getAccountTransactionsBy(accountNumber: number, startIndex: number, numberOfTransactions: number): Promise {\r\n let transactions: Transaction[] = [];\r\n let omniTransactions: OmniTransactionView[] = [];\r\n try {\r\n omniTransactions = await (this._webcoreBaseWallet as OmniWallet).GetTransactionViewList(accountNumber, startIndex, numberOfTransactions);\r\n MyConsole.Info(\"Loaded transaction:\", omniTransactions);\r\n\r\n if (omniTransactions && omniTransactions.length > 0) {\r\n for (let omniTran of omniTransactions) {\r\n let transaction = {};\r\n transaction.targets = [];\r\n transaction.hash = omniTran.hash;\r\n transaction.date = omniTran.date;\r\n transaction.isValid = omniTran.isValid;\r\n transaction.invalidReason = omniTran.invalidReason;\r\n\r\n if (omniTran.status == 'RECEIVED') {\r\n transaction.type = TransactionType.Received;\r\n transaction.targets.push(({\r\n address: omniTran.toAddress,\r\n value: omniTran.amount,\r\n status: omniTran.status,\r\n }));\r\n } else if (omniTran.status == 'SENT') {\r\n transaction.type = TransactionType.Sent;\r\n transaction.targets.push(({\r\n address: omniTran.toAddress,\r\n value: omniTran.amount,\r\n status: omniTran.status,\r\n }));\r\n }\r\n\r\n transactions.push(transaction);\r\n }\r\n }\r\n return transactions;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n//#region Private Methods\r\n private _ToAccountInfo(omniAccount: OmniAccountInfo): AccountInfo {\r\n const defaultAccount: AccountInfo = {};\r\n\r\n if (omniAccount == null) {\r\n return defaultAccount;\r\n }\r\n\r\n defaultAccount.id = omniAccount.accountIndex;\r\n defaultAccount.balance = omniAccount.balance;\r\n defaultAccount.lastUnusedAddress = omniAccount.addressModel;\r\n defaultAccount.hasAccountPerEachAddress = true;\r\n defaultAccount.allAddresses = [omniAccount.addressModel];\r\n\r\n if (omniAccount.transactions) {\r\n defaultAccount.transactions = omniAccount.transactions.length;\r\n }\r\n\r\n return defaultAccount;\r\n }\r\n\r\n isAddressValid(address: string): boolean {\r\n return this._webcoreBaseWallet.IsAddressValid(address);\r\n }\r\n\r\n /**\r\n * This function will return the first path of the first account\r\n * @returns The path of Account 0 Path 0\r\n */\r\n getPathOfFirstAddress(): AddressModel {\r\n return PathUtil.GetBipPath(\r\n CoinBaseType.OMNI,\r\n 0 // Account 0\r\n );\r\n }\r\n\r\n getCoinExtraIdTypes(): Array {\r\n return null;\r\n }\r\n\r\n private _ensureAccountDiscoveryIsDone(accountIndex?: number) {\r\n if(this._fullDiscoveredWallet == null) {\r\n throw new Error(\"No wallet info, Call AccountDiscovery first\");\r\n }\r\n\r\n if(accountIndex != null && (accountIndex < 0 || accountIndex >= this._fullDiscoveredWallet.accounts.length)) {\r\n throw new Error(\"Account index is out of range\");\r\n }\r\n }\r\n\r\n//#endregion\r\n}\r\n","import {AccountBrief} from \"@core/models/connect/account-brief\";\r\nimport {AccountInfo} from \"@core/models/connect/account-info\";\r\nimport {BaseOutput} from \"@core/models/connect/base-output\";\r\nimport {CoinModel} from \"@core/models/connect/coin-model\";\r\nimport {Transaction} from \"@core/models/connect/transaction\";\r\nimport {Wallet} from \"./wallet\";\r\nimport {Device} from '@webcore/device/Device';\r\nimport {RippleWallet} from '@webcore/wallet/RippleWallet';\r\nimport {AddressModel, RippleAddress, RippleSignedTx} from \"@webcore/models/Prokey\";\r\nimport * as PathUtil from \"@webcore/utils/pathUtils\";\r\nimport {CoinBaseType} from \"@webcore/coins/CoinInfo\";\r\nimport {RippleCoinInfoModel} from \"@webcore/models/CoinInfoModel\";\r\nimport {BitcoinFeeSelectionModel} from \"@webcore/models/FeeSelectionModel\";\r\nimport {TransactionType} from \"@core/models/connect/transaction-type.enum\";\r\nimport {ExtraId} from \"@core/models/connect/extra-id\";\r\nimport {MyConsole} from \"@webcore/utils/console\";\r\nimport { RippleAccountInfo, RippleWalletModel } from '@webcore/models/RippleWalletModel';\r\nimport {GenericSentTransactionResult} from \"@webcore/models/GenericWalletModel\";\r\n\r\nexport class Ripple extends Wallet {\r\n\r\n _accountInfo: Array;\r\n _rippleWallet: RippleWalletModel;\r\n _fee: BitcoinFeeSelectionModel;\r\n\r\n\r\n /**\r\n Ripple\r\n */\r\n constructor(device: Device, coinModel: CoinModel) {\r\n super(device, coinModel);\r\n this._webcoreBaseWallet = new RippleWallet(device, coinModel.coinInfo.name);\r\n this._accountInfo = new Array(1);\r\n this._accountInfo.push(\r\n {\r\n lastUnusedAddress: this.getPathOfFirstAddress(),\r\n balance: 0,\r\n id: 0,\r\n transactions: 0,\r\n xpub: 'test'\r\n }\r\n );\r\n this._rippleWallet = {\r\n totalBalance: 0,\r\n accounts: new Array()\r\n }\r\n }\r\n\r\n //#region Wallet methods(inherited)\r\n\r\n /**\r\n * Get count of accounts, -1 means no account at all\r\n * @returns\r\n */\r\n get AccountsCount(): number {\r\n if (this._rippleWallet.accounts == null) {\r\n return -1;\r\n }\r\n return this._rippleWallet.accounts.length;\r\n }\r\n\r\n ClearCache(): void {\r\n this._currentAccountIndex = 0;\r\n this._isAccountDiscoveryFinished = false;\r\n this._rippleWallet = {\r\n totalBalance: 0,\r\n accounts: new Array()\r\n };\r\n this.NeedToReSync = false;\r\n }\r\n\r\n StartAccountDiscovery(onNewAccountCallBack: (discoveredAccountNumber: number) => void): Promise {\r\n return new Promise((resolve, reject)=> {\r\n if (this._rippleWallet.accounts && this._rippleWallet.accounts.length > 0) {\r\n if (onNewAccountCallBack) {\r\n for (let accountCounter = 0; accountCounter < this._rippleWallet.accounts.length; accountCounter++) {\r\n onNewAccountCallBack(accountCounter);\r\n }\r\n this._isAccountDiscoveryFinished = true;\r\n return resolve();\r\n }\r\n } else {\r\n this._rippleWallet.accounts = new Array();\r\n }\r\n try {\r\n let accountCounter = 0;\r\n (this._webcoreBaseWallet as RippleWallet).StartDiscovery(accountInfo => {\r\n this._rippleWallet.accounts.push(accountInfo);\r\n this._rippleWallet.totalBalance += +accountInfo.Balance!;\r\n if (onNewAccountCallBack) {\r\n onNewAccountCallBack(accountCounter++);\r\n }\r\n }).then(() => {\r\n this._isAccountDiscoveryFinished = true;\r\n this._totalBalance = this._rippleWallet.totalBalance;\r\n return resolve();\r\n });\r\n } catch (e) {\r\n this._isAccountDiscoveryFinished = false;\r\n return reject(e);\r\n }\r\n });\r\n }\r\n\r\n getAllAccountsInfo?(): AccountInfo[] {\r\n if (this._rippleWallet.accounts?.length > 0) {\r\n let accountCounter = 0;\r\n return this._rippleWallet.accounts.map((rippleAccountInfo: RippleAccountInfo) => {\r\n return this._ToAccountInfo(accountCounter++);\r\n })\r\n }\r\n return [];\r\n }\r\n\r\n getAccountsCount(): number {\r\n if(this._rippleWallet.accounts == null) {\r\n return -1;\r\n }\r\n return this._rippleWallet.accounts.length;\r\n }\r\n\r\n canAddNewAccount(): boolean {\r\n if(this._isAccountDiscoveryFinished == false || this._isNewAccountAlreadyAdded == true) {\r\n return false;\r\n }\r\n\r\n if(this._rippleWallet.accounts == null || this._rippleWallet.accounts.length == 0) {\r\n return false;\r\n }\r\n\r\n const lastAccount = this._rippleWallet.accounts[this._rippleWallet.accounts.length - 1];\r\n return +lastAccount.Balance != 0;\r\n }\r\n\r\n async _addNewAccount(): Promise {\r\n if(this._rippleWallet.accounts == null) {\r\n return -1;\r\n }\r\n\r\n let addressModel = PathUtil.GetBipPath(\r\n CoinBaseType.Ripple,\r\n this._rippleWallet.accounts.length,\r\n this.CoinInfo\r\n );\r\n\r\n addressModel.address = await this.getAddress(addressModel.path, false);\r\n\r\n let newAccount: RippleAccountInfo = {\r\n Account: addressModel.address,\r\n Balance: \"0\",\r\n OwnerCount: undefined,\r\n PreviousTxnId: undefined,\r\n PreviousTxnLgrSeq: undefined,\r\n Sequence: undefined,\r\n TickSize: undefined,\r\n TransferRate: undefined,\r\n LedgerEntryType: undefined,\r\n Flags: undefined,\r\n\r\n isAccountFounded: false,\r\n addressModel: addressModel,\r\n }\r\n //TODO: Set the account address\r\n\r\n this._rippleWallet.accounts.push(newAccount);\r\n this._isNewAccountAlreadyAdded = true;\r\n\r\n return this._rippleWallet.accounts.length - 1;\r\n }\r\n\r\n getWebcoreAccountInfo(accountIndex: number) {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n return this._rippleWallet.accounts[ai];\r\n }\r\n\r\n getAccountBrief(accountIndex: number): AccountBrief {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n const accInfo = this._rippleWallet.accounts[ai];\r\n\r\n return {\r\n id: ai,\r\n balance: +accInfo.Balance,\r\n label: `Account #${ai + 1}`,\r\n }\r\n }\r\n\r\n getAccountInfo(accountIndex: number): AccountInfo {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n const ai = accountIndex ?? this._currentAccountIndex;\r\n\r\n return this._ToAccountInfo(ai);\r\n }\r\n\r\n setCurrentAccount(accountIndex: number): void {\r\n this._ensureAccountDiscoveryIsDone(accountIndex);\r\n\r\n this._currentAccountIndex = accountIndex;\r\n }\r\n\r\n getPublicKey(account: number, showOnProkey: boolean): Promise {\r\n //! No public key\r\n return null;\r\n }\r\n\r\n async getAddress(path: number[], showOnProkey: boolean): Promise {\r\n console.log(\"hmm\");\r\n console.log(path);\r\n return await this._webcoreBaseWallet.GetAddress(path, showOnProkey);\r\n }\r\n\r\n getAddresses(accountInfo: AccountInfo): Promise {\r\n return this._webcoreBaseWallet.GetAddresses([accountInfo.lastUnusedAddress.path]);\r\n }\r\n\r\n // async getAccountInfo(coin: CoinModel, changeDiscovery?: boolean): Promise {\r\n // this._rippleWallet.accounts = await (this._webcoreBaseWallet as RippleWallet).StartDiscovery((accountInfo) => {\r\n // MyConsole.Info(\"new ripple account\", accountInfo);\r\n // });\r\n\r\n // let accounts = new Array();\r\n // this._accountInfo.length = 0;\r\n // if (this._rippleWallet.accounts.length > 0) {\r\n // let i = 0;\r\n // for (i = 0; i < this._rippleWallet.accounts.length; i++) {\r\n // accounts.push({\r\n // id: i, label: `Account ${i + 1}`,\r\n // balance: this._rippleWallet.accounts[i].Balance == null ? 0 : +this._rippleWallet.accounts[i].Balance,\r\n // balancePrice: 0,\r\n // isNewAccount: false,\r\n // isDiscoveryFinished: true,\r\n // });\r\n\r\n // this._accountInfo.push({\r\n // addressModel: {\r\n // address: this._rippleWallet.accounts[i].Account,\r\n // path: this._rippleWallet.accounts[i].addressModel.path\r\n // },\r\n // balance: +this._rippleWallet.accounts[i].Balance,\r\n // id: i,\r\n // transactions: 0,\r\n // xpub: 'test',\r\n // hasAccountPerEachAddress: true\r\n // });\r\n\r\n // if (changeDiscovery && this._isCurrentWallet === true) {\r\n // this._changeDiscoveryAccount(accounts[i]);\r\n // }\r\n // }\r\n // // Add a new empty account to enable add account button\r\n // accounts.push({\r\n // id: i, label: `Account ${i + 1}`,\r\n // balance: 0,\r\n // balancePrice: 0,\r\n // isNewAccount: true,\r\n // isDiscoveryFinished: true\r\n // });\r\n\r\n // this._accountInfo.push({\r\n // addressModel: PathUtil.GetBipPath(CoinBaseType.Ripple, i, this._coinModel.coinInfo),\r\n // balance: 0,\r\n // id: i,\r\n // transactions: 0,\r\n // xpub: 'test',\r\n // hasAccountPerEachAddress: true\r\n // });\r\n // if (changeDiscovery && this._isCurrentWallet === true) {\r\n // this._changeDiscoveryAccount(accounts[i]);\r\n // }\r\n // }\r\n // else {\r\n // accounts = [{ id: 0, label: `Account 1`, balance: 0, balancePrice: 0, isNewAccount: true, isDiscoveryFinished: true }];\r\n // this._accountInfo.push({\r\n // addressModel: this.getPathOfFirstAddress(),\r\n // balance: 0,\r\n // id: 0,\r\n // transactions: 0,\r\n // xpub: 'test',\r\n // hasAccountPerEachAddress: true\r\n // });\r\n\r\n // if (changeDiscovery && this._isCurrentWallet === true) {\r\n // this._changeDiscoveryAccount(accounts[0]);\r\n // }\r\n // }\r\n\r\n // return accounts;\r\n // }\r\n\r\n async signMessage(path: number[], message: string): Promise {\r\n const coinInfo = this._webcoreBaseWallet.GetCoinInfo() as RippleCoinInfoModel;\r\n return await this._webcoreBaseWallet.SignMessage(path, message, coinInfo.on_device);\r\n }\r\n\r\n async verifyMessage(address: string, message: string, signature: string): Promise {\r\n const coinInfo = this._webcoreBaseWallet.GetCoinInfo() as RippleCoinInfoModel;\r\n return await this._webcoreBaseWallet.VerifyMessage(address, message, signature, coinInfo.on_device);\r\n }\r\n\r\n prepareSendModel(output: BaseOutput, ...params: any[]) {\r\n const amount = +output.amount * Math.pow(10, this._coinModel.coinInfo.decimals);\r\n const fee = this._fee[params[1].toLowerCase()];\r\n const destinationTag = output.extraIdValue;\r\n return (this._webcoreBaseWallet as RippleWallet).GenerateTransaction(output.address, amount, params[0].id, fee, +destinationTag);\r\n }\r\n\r\n async sendTransaction(model: any): Promise {\r\n let tx = await this._webcoreBaseWallet.SignTransaction(model) as RippleSignedTx;\r\n MyConsole.Info(\"tx\", tx);\r\n let sendTxResponse = await (this._webcoreBaseWallet as RippleWallet).SendTransaction(tx);\r\n MyConsole.Info(\"ripple_send\", sendTxResponse);\r\n let generalResponse = {};\r\n generalResponse.isSuccess = sendTxResponse.broadcast;\r\n if (generalResponse.isSuccess) {\r\n generalResponse.txid = sendTxResponse.tx_json.hash;\r\n } else {\r\n generalResponse.error = sendTxResponse.engine_result_message;\r\n }\r\n return generalResponse;\r\n }\r\n\r\n handleSendResult(payload: any): Promise {\r\n MyConsole.Info(\"payload\", payload);\r\n return payload;\r\n }\r\n\r\n async calculateTransactionFee(outputValue: BaseOutput, fromAccount: number) {\r\n let ripple_fee = await (this._webcoreBaseWallet as RippleWallet).GetCurrentFee();\r\n this._fee = {\r\n economy: ripple_fee.drops.minimum_fee,\r\n normal: (+ripple_fee.drops.median_fee / 2).toString(),\r\n priority: ripple_fee.drops.median_fee,\r\n unit: this._coinModel.coinInfo.shortcut,\r\n decimal: this._coinModel.coinInfo.decimals\r\n };\r\n return this._fee;\r\n }\r\n\r\n async getAccountTransactionsBy(accountNumber: number, startIndex: number, numberOfTransactions: number): Promise {\r\n let txes = new Array();\r\n if (this._rippleWallet.accounts.length == 0 || this._rippleWallet.accounts.length <= accountNumber)\r\n return txes;\r\n\r\n let accountTxes = await (this._webcoreBaseWallet as RippleWallet).GetAccountTransactions(accountNumber);\r\n accountTxes.forEach(element => {\r\n if (element.tx.TransactionType == \"Payment\") {\r\n let transaction = {};\r\n transaction.targets = [];\r\n transaction.hash = element.tx.hash;\r\n //transaction.date = new Date(element.tx. * 1000 + 946684800000).toString();\r\n transaction.isValid = element.meta.TransactionResult == \"tesSUCCESS\";\r\n if (!transaction.isValid)\r\n transaction.invalidReason = element.meta.transactionResult;\r\n if (element.tx.Destination == this._rippleWallet.accounts[accountNumber].Account) {\r\n transaction.type = TransactionType.Received;\r\n transaction.targets.push({\r\n address: element.tx.Account,\r\n value: +element.tx.Amount,\r\n status: element.validated ? \"Validated\" : \"NOT validated\"\r\n });\r\n } else {\r\n transaction.type = TransactionType.Sent;\r\n transaction.targets.push({\r\n address: element.tx.Destination,\r\n value: +element.tx.Amount,\r\n status: element.validated ? \"Validated\" : \"NOT validated\"\r\n });\r\n }\r\n txes.push(transaction);\r\n }\r\n });\r\n return txes;\r\n }\r\n\r\n//#endregion\r\n\r\n //#region Private method\r\n\r\n isAddressValid(address: string): boolean {\r\n return this._webcoreBaseWallet.IsAddressValid(address);\r\n }\r\n\r\n /**\r\n * This function will return the first path of the first account\r\n * @returns The path of Account 0 Path 0\r\n */\r\n getPathOfFirstAddress(): AddressModel {\r\n return PathUtil.GetBipPath(\r\n CoinBaseType.Ripple,\r\n 0,\r\n this._coinModel.coinInfo\r\n );\r\n }\r\n\r\n getCoinExtraIdTypes(): Array {\r\n return [{label: 'Destination tag', type: 'destinationTag', default: true}];\r\n }\r\n\r\n private _ToAccountInfo(rippleAccountIndex: number): AccountInfo {\r\n let defaultAccount: AccountInfo = {};\r\n let rippleAccount = this._rippleWallet.accounts[rippleAccountIndex];\r\n\r\n if (rippleAccount == null) {\r\n return defaultAccount;\r\n }\r\n\r\n defaultAccount = {\r\n lastUnusedAddress: rippleAccount.addressModel,\r\n balance: +rippleAccount.Balance,\r\n id: rippleAccountIndex,\r\n transactions: 0,\r\n xpub: 'test',\r\n hasAccountPerEachAddress: true\r\n }\r\n\r\n return defaultAccount;\r\n }\r\n\r\n private _ensureAccountDiscoveryIsDone(accountIndex?: number) {\r\n if (this._rippleWallet.accounts == null) {\r\n throw new Error(\"No wallet info, Call AccountDiscovery first\");\r\n }\r\n\r\n if (accountIndex != null && (accountIndex < 0 || accountIndex >= this._rippleWallet.accounts.length)) {\r\n throw new Error(\"Account index is out of range\");\r\n }\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { CoinModel } from \"@core/models/connect/coin-model\";\r\nimport { CoinBaseType, CoinInfo } from \"@webcore/coins/CoinInfo\";\r\nimport { BitcoinBaseCoinInfoModel, Erc20BaseCoinInfoModel } from \"@webcore/models/CoinInfoModel\";\r\nimport { BehaviorSubject } from \"rxjs/internal/BehaviorSubject\";\r\nimport { CustomTokenService } from \"../custom-token.service\";\r\n\r\nexport class WalletCoins {\r\n\r\n private _coins: CoinModel[] = [];\r\n private _famousCoins: CoinModel[] = [];\r\n private _otherCoins: CoinModel[] = [];\r\n private _myCoins: CoinModel[] = [];\r\n private _defaultCoin: CoinModel;\r\n private readonly _priorityNumber: number = 10;\r\n\r\n private _otherCoinsSource = new BehaviorSubject(this._otherCoins);\r\n private _assetCoinsSource = new BehaviorSubject(false);\r\n\r\n // number of wallet supported coins\r\n count: number = 0;\r\n\r\n onOtherCoinsChange = this._otherCoinsSource.asObservable();\r\n onAssetCoinsChange = this._assetCoinsSource.asObservable();\r\n\r\n /**\r\n * Initialize wallet coins by device version.\r\n */\r\n constructor(\r\n private _deviceVersion: string,\r\n private _customTokenService: CustomTokenService) {\r\n this._initialize(_deviceVersion);\r\n }\r\n\r\n getCoins(): CoinModel[] {\r\n return this._coins;\r\n }\r\n\r\n getFamousCoins(): CoinModel[] {\r\n return this._famousCoins;\r\n }\r\n\r\n getOtherCoins(): CoinModel[] {\r\n return this._otherCoins;\r\n }\r\n\r\n getMyCoins(myFamous: string[]): CoinModel[] {\r\n if (myFamous?.length > 0) {\r\n this._myCoins = this._famousCoins.concat(this._otherCoins.filter(c => myFamous.includes(c.coinInfo.id)));\r\n } else {\r\n this._myCoins = this._famousCoins;\r\n }\r\n \r\n return this._myCoins;\r\n }\r\n\r\n addOtherCoins(otherCoins: CoinModel[], withChangeSource: boolean) {\r\n if (otherCoins.length === 0) {\r\n this._otherCoins = otherCoins;\r\n } else {\r\n otherCoins.forEach(coin => this._otherCoins.push(coin));\r\n }\r\n\r\n if (withChangeSource) {\r\n this._changeOtherCoinsSource();\r\n }\r\n }\r\n\r\n changeAssetCoinsSource() {\r\n this._assetCoinsSource.next(true);\r\n }\r\n\r\n get defaultCoin(): CoinModel {\r\n return this._defaultCoin;\r\n }\r\n\r\n private _changeOtherCoinsSource() {\r\n this._otherCoinsSource.next(this._otherCoins);\r\n }\r\n\r\n private _initialize(version: string) {\r\n this._coins = [];\r\n const coins = CoinInfo.GetAllCoinsInfoByVersion(version);\r\n const customTokens = this._customTokenService.getCustomTokens();\r\n for (const coin of coins) {\r\n const model = new CoinModel(coin);\r\n model.isFamous = coin.priority < this._priorityNumber;\r\n model.isCustomToken = false;\r\n this._coins.push(model);\r\n }\r\n \r\n this._addCustomTokens(customTokens, this._coins);\r\n this.count = this._coins.length;\r\n\r\n if (this.count > 0) {\r\n this._famousCoins = this._coins.filter(c => c.isFamous === true);\r\n this._otherCoins = this._coins.filter(c => c.isFamous === false);\r\n this._changeOtherCoinsSource();\r\n }\r\n\r\n this._setDefaultCoin();\r\n }\r\n \r\n private _addCustomTokens(customTokens: Array, coinModels: CoinModel[]) {\r\n if (customTokens) {\r\n for (const coin of customTokens) {\r\n const model = new CoinModel(coin);\r\n model.isFamous = false;\r\n model.isCustomToken = true;\r\n coinModels.push(model);\r\n }\r\n }\r\n }\r\n\r\n private _setDefaultCoin(){\r\n let btcCoinInfo = CoinInfo.Get(\"Bitcoin\", CoinBaseType.BitcoinBase);\r\n this._defaultCoin = new CoinModel(btcCoinInfo);\r\n }\r\n}\r\n","import {CoinModel} from \"@core/models/connect/coin-model\";\r\nimport {ExtraId} from \"@core/models/connect/extra-id\";\r\nimport {Device} from \"@webcore/device/Device\";\r\nimport {AddressModel} from \"@webcore/models/Prokey\";\r\nimport {BaseWallet} from \"@webcore/wallet/BaseWallet\";\r\nimport * as PathUtil from \"@webcore/utils/pathUtils\";\r\nimport {AccountBrief} from \"@core/models/connect/account-brief\";\r\nimport {AccountInfo} from \"@core/models/connect/account-info\";\r\nimport {BaseOutput} from \"@core/models/connect/base-output\";\r\nimport {Transaction} from \"@core/models/connect/transaction\";\r\nimport * as GenericWalletModel from \"@webcore/models/GenericWalletModel\";\r\n\r\nexport abstract class Wallet {\r\n\r\n _device: Device;\r\n _coinModel: CoinModel;\r\n _webcoreBaseWallet : BaseWallet;\r\n _currentAccountIndex: number = 0;\r\n _isNewAccountAlreadyAdded = false;\r\n _isAccountDiscoveryFinished = false;\r\n protected _totalBalance?: number;\r\n protected _needToReSync: boolean = false;\r\n\r\n constructor(device: Device, coinModel: CoinModel) {\r\n this._device = device;\r\n this._coinModel = coinModel;\r\n }\r\n\r\n /**\r\n * Each wallet can have several accounts. This function will return the current account index\r\n */\r\n get CurrentAccountIndex(): number {\r\n return this._currentAccountIndex;\r\n }\r\n\r\n /**\r\n * To check if account discovery finished\r\n */\r\n get IsAccountDiscoveryFinished(): boolean {\r\n return this._isAccountDiscoveryFinished;\r\n }\r\n\r\n get CoinModel(): CoinModel {\r\n return this._coinModel;\r\n }\r\n\r\n get CoinInfo() {\r\n return this._webcoreBaseWallet.GetCoinInfo();\r\n }\r\n\r\n get TotalBalance(): number | null {\r\n return this._totalBalance;\r\n }\r\n\r\n get NeedToReSync(): boolean {\r\n return this._needToReSync;\r\n }\r\n\r\n set NeedToReSync(needToReSync: boolean) {\r\n this._needToReSync = needToReSync;\r\n }\r\n\r\n getCoinExtraIdTypes(): Array {\r\n return null;\r\n }\r\n\r\n isAddressValid(address: string): boolean {\r\n return this._webcoreBaseWallet.IsAddressValid(address);\r\n }\r\n\r\n /**\r\n * This function will return the first path of the first account\r\n * @returns The path of Account 0 Path 0\r\n */\r\n abstract getPathOfFirstAddress(account: number): AddressModel;\r\n\r\n /**\r\n * To get Public Key\r\n * @param account Account number\r\n * @param showOnProkey True means show the public key on the device\r\n */\r\n abstract getPublicKey(account: number, showOnProkey: boolean): Promise;\r\n\r\n /**\r\n * To get Address\r\n * @param path BIP 32 based path\r\n * @param showOnProkey True means show the address on the device\r\n */\r\n abstract getAddress(path: Array, showOnProkey: boolean): Promise;\r\n\r\n abstract getAddresses(accountInfo: AccountInfo): Promise;\r\n\r\n /**\r\n * Get count of accounts, -1 means no account at all\r\n * @returns\r\n */\r\n abstract get AccountsCount(): number;\r\n\r\n /**\r\n * Delete previous account data and ...\r\n * This function should be called when user wants to refresh the wallet\r\n */\r\n abstract ClearCache(): void;\r\n\r\n /**\r\n * Start discovering wallet accounts\r\n * To get account and wallet info, you need to call getAccountInfo\r\n * If all accounts have been already discovered, this function will resolve using previous data immadiatly\r\n * To have a refresh account discovery, Call ClearCache first\r\n * @param updateCallBack Inform upper later that an account has discovered.\r\n * @returns Promise which will be resolved at the end of account discovery process\r\n */\r\n abstract StartAccountDiscovery(onNewAccountCallBack: (discoveredAccountNumber: number) => void): Promise;\r\n\r\n /**\r\n * To ask if a new account can be added to list of current accounts\r\n * IMPORTANT: To get the currect response, Call this function after account discovery finished\r\n * @returns True means the \"addNewAccount\" func can be called in order to add a new (virtual) account\r\n */\r\n abstract canAddNewAccount(): boolean;\r\n\r\n /**\r\n * Add new account, Call \"canAddNewAccount\" first\r\n * DO NOT CALL THIS FUNCTION DIRECTLY IF YOU WANT EVENTS RISE AFTER ADDING NEW ACCOUNT, So call it through wallet service\r\n * @returns New account index. -1 means fail\r\n */\r\n abstract _addNewAccount(): Promise;\r\n\r\n //TODO: instead of any, we better to return exact type\r\n abstract getWebcoreAccountInfo(accountIndex: number): any;\r\n\r\n abstract getAccountBrief(accountIndex: number): AccountBrief;\r\n\r\n abstract getAccountInfo(accountIndex?: number): AccountInfo;\r\n\r\n /**\r\n * This method will return all discovered accounts info.\r\n * @returns Array an array of accounts info.\r\n */\r\n abstract getAllAccountsInfo?(): AccountInfo[];\r\n\r\n /**\r\n * Set the current account\r\n * @param accountIndex\r\n */\r\n abstract setCurrentAccount(accountIndex: number): void;\r\n\r\n abstract signMessage(path: Array, message: string): Promise;\r\n\r\n abstract verifyMessage(address: string, message: string, signature: string): Promise;\r\n\r\n abstract prepareSendModel(output: BaseOutput, ...params: any[]): any;\r\n\r\n abstract sendTransaction(model: any): Promise;\r\n\r\n abstract calculateTransactionFee(outputValue: BaseOutput, fromAccount: number): any;\r\n\r\n abstract getAccountTransactionsBy(accountNumber: number, startIndex: number, numberOfTransactions: number): Promise;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ErrorCode } from '../models/error-code-type';\r\n\r\n@Injectable()\r\nexport class CustomErrorHandlerService {\r\n code: ErrorCode;\r\n\r\n constructor() {\r\n }\r\n\r\n getErrorMessage(errorCode: string): string {\r\n let message = this.code[errorCode];\r\n if (message) {\r\n return message;\r\n }\r\n return '';\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {CustomToken} from '@core/models/custom-token';\r\nimport {NetworkModel} from '@core/models/network-model';\r\nimport {Erc20BaseCoinInfoModel} from '@webcore/models/CoinInfoModel';\r\nimport {CoinBaseType, CoinInfo} from '@webcore/coins/CoinInfo';\r\nimport * as EthereumNetworks from '@webcore/utils/ethereum-networks';\r\nimport {BaseRepository} from './storage/repository/base-repository';\r\nimport {WalletDeviceService} from \"./wallet-device.service\";\r\nimport {ProkeySettingsService} from \"@core/services/prokey-settings.service\";\r\nimport {ProkeySettingsKey} from \"@core/models/prokey-settings-key.enum\";\r\nimport {ProkeySettings} from \"@core/models/prokey-settings\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CustomTokenService {\r\n private customTokenKey = 'custom-tokens';\r\n networks: Array = [\r\n {\r\n name: 'Ethereum',\r\n chainId: 1,\r\n supportVersion: '1.8.1',\r\n type: CoinBaseType.ERC20,\r\n isTest: false\r\n },\r\n {\r\n name: 'Binance Smart Chain',\r\n chainId: 56,\r\n supportVersion: '1.8.1',\r\n type: CoinBaseType.ERC20,\r\n isTest: false\r\n },\r\n {\r\n name: 'Rinkeby',\r\n chainId: 4,\r\n supportVersion: '1.8.1',\r\n type: CoinBaseType.ERC20,\r\n isTest: true\r\n }\r\n ];\r\n private repository: BaseRepository;\r\n\r\n constructor(private _deviceService: WalletDeviceService, private _prokeySettingsService: ProkeySettingsService) {\r\n }\r\n\r\n getCustomTokens(): Array {\r\n return this._prokeySettingsService.get(ProkeySettingsKey.CUSTOM_TOKENS);\r\n }\r\n\r\n async addCustomToken(coinModel: CustomToken): Promise {\r\n const coin: Erc20BaseCoinInfoModel = {\r\n name: coinModel.tokenName,\r\n shortcut: coinModel.symbol,\r\n support: {\r\n optimum: coinModel.network.supportVersion\r\n },\r\n test: coinModel.network.isTest,\r\n decimals: coinModel.decimal,\r\n slip44: this.getSlip44(coinModel),\r\n coinBaseType: CoinBaseType.ERC20,\r\n id: this.getId(coinModel),\r\n chain_id: coinModel.network.chainId,\r\n type: 'erc20',\r\n address: coinModel.contractAddress,\r\n tx_url: this.GetTransactionUrl(coinModel),\r\n priority: 11,\r\n };\r\n let setting: ProkeySettings = await this._prokeySettingsService.getAll();\r\n let customTokenArray = setting.customTokens;\r\n if (!customTokenArray) {\r\n customTokenArray = new Array();\r\n }\r\n customTokenArray.push(coin);\r\n setting.customTokens = customTokenArray;\r\n await this._prokeySettingsService.patch(setting);\r\n return coin;\r\n }\r\n\r\n async deleteCustomToken(coin: Erc20BaseCoinInfoModel) {\r\n let customTokenArray: Array = await this.repository.get>(this.customTokenKey);\r\n if (customTokenArray) {\r\n customTokenArray = customTokenArray.filter(token => token.id !== coin.id);\r\n }\r\n await this.repository.save(this.customTokenKey, customTokenArray);\r\n }\r\n\r\n getSlip44(coinModel: CustomToken) {\r\n if (coinModel.network.type === CoinBaseType.ERC20) {\r\n return EthereumNetworks.GetSlip44ByChainId(coinModel.network.chainId);\r\n }\r\n throw new Error('unsupported coin type');\r\n }\r\n\r\n getId(coinModel: CustomToken) {\r\n if (coinModel.network.type === CoinBaseType.ERC20) {\r\n return `erc20_${EthereumNetworks.GetNetworkByChainId(coinModel.network.chainId)}_${coinModel.symbol}`;\r\n }\r\n throw new Error('unsupported coin type');\r\n }\r\n\r\n GetTransactionUrl(coinModel: CustomToken) {\r\n if (coinModel.network.type === CoinBaseType.ERC20) {\r\n return this.GetTransactionUrlBaseOnChainId(coinModel.network.chainId);\r\n }\r\n throw new Error('unsupported coin type');\r\n }\r\n\r\n async getAvailableNetworks(): Promise> {\r\n const deviceCurrentVersion = await this._deviceService.getVersion();\r\n console.log(deviceCurrentVersion);\r\n return this.networks.filter(network => CoinInfo.compareVersions(deviceCurrentVersion, network.supportVersion) >= 0);\r\n }\r\n\r\n GetTransactionUrlBaseOnChainId(chainId: number): string {\r\n switch (chainId) {\r\n // ETH tokens\r\n case 1:\r\n return `https://etherscan.io/tx/{hash}`;\r\n // trin tokens\r\n case 4:\r\n return `https://rinkeby.etherscan.io/tx/{hash}`;\r\n // RSK tokens\r\n case 30:\r\n return `https://explorer.rsk.co/tx/{hash}`;\r\n // tRSK tokens\r\n case 31:\r\n return `https://explorer.testnet.rsk.co/tx/{hash}`;\r\n // BSC tokens\r\n case 56:\r\n return `https://bscscan.com/tx/{hash}`;\r\n }\r\n }\r\n}\r\n","import * as $ from \"jquery\";\r\n\r\ndeclare var toastr: any;\r\ndeclare var jQuery:any;\r\ndeclare var $:any;\r\ndeclare var ClipboardJS: any;\r\ndeclare var ApexCharts: any;\r\ndeclare var marketPriceChart: any;\r\ndeclare var oTable: any;\r\ndeclare var Waves: any;\r\n\r\ndeclare global {\r\n export interface String {\r\n toCoinId: () => string;\r\n isNullOrEmpty: () => boolean;\r\n }\r\n}\r\n\r\n/*\r\n * Replace spaces with dash to coin id for coingecko api.\r\n * For example: replace 'Bitcoin Cash' to 'bitcoin-cash'\r\n*/\r\nString.prototype.toCoinId = function (): string {\r\n if (this.includes('Tether') || this.includes('tether')) {\r\n return 'tether';\r\n }\r\n if (this.includes('Binance Smart Chain')) {\r\n return 'binancecoin';\r\n }\r\n return this.toLowerCase().split(' ').join('-');\r\n}\r\n\r\nString.prototype.isNullOrEmpty = function (): boolean {\r\n if (this === undefined || this === null || this.trim() === '') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport class Helpers {\r\n\r\n\tstatic setLoading(loading) {\r\n\t\tlet body = $('body');\r\n\t\tif (loading) {\r\n\t\t\t$('.preloader-backdrop').fadeIn(200);\r\n\t\t} else {\r\n\t\t\t$('.preloader-backdrop').fadeOut(200);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic bodyClass(Class) {\r\n\t\t$('body').attr('class', Class);\r\n\t}\r\n\r\n\tstatic initLayout() {\r\n\t // SIDEBAR ACTIVATE METISMENU\r\n\t\t$(\".metismenu\").metisMenu();\r\n\r\n\t\t// SIDEBAR TOGGLE ACTION\r\n\t $('.js-sidebar-toggler').click(function() {\r\n\t if( $('body').hasClass('drawer-sidebar') ) {\r\n\t $('#sidebar').backdrop();\r\n\t } else {\r\n\t $('body').toggleClass('sidebar-mini');\r\n\t if(! $('body').hasClass('sidebar-mini') ) {\r\n\t $('#sidebar-collapse').hide();\r\n\t setTimeout(function () {\r\n\t $('#sidebar-collapse').fadeIn(300);\r\n\t }, 200);\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t // QUICK SIDEBAR TOGGLE ACTION\r\n\t $('.quick-sidebar-toggler').click(function(){\r\n\t $('.quick-sidebar').backdrop();\r\n\t });\r\n\r\n\t // SEARCH BAR ACTION\r\n\t $('.js-search-toggler').click(function() {\r\n\t $('.search-top-bar').backdrop().find('.search-input').focus();\r\n\t });\r\n\r\n\t // Session timeout\r\n\r\n\t var idle_timer;\r\n\t (function(){\r\n\t $('#timeout-activate').click(function(){\r\n\t if(+$('#timeout-count').val()) {\r\n\t activate(+$('#timeout-count').val());\r\n\t }\r\n\t });\r\n\r\n\t $('#timeout-reset').click(function(){\r\n\t reset();\r\n\t });\r\n\r\n\t function reset(){\r\n\t $( document ).idleTimer(\"destroy\");\r\n\t if(idle_timer) clearTimeout(idle_timer);\r\n\t $('#session-dialog').modal('hide');\r\n\t $('.timeout-toggler').removeClass('active');\r\n\t $('#timeout-reset-box').hide();\r\n\t $('#timeout-activate-box').show();\r\n\t }\r\n\r\n\t function activate(count){\r\n\t $('#session-dialog').modal('hide');\r\n\t $('#timeout-reset-box').show();\r\n\t $('#timeout-activate-box').hide();\r\n\t $( document ).idleTimer( count * 60000 );\r\n\r\n\t setTimeout(function(){\r\n\t $('.timeout-toggler').addClass('active');\r\n\t },(count-1) * 60000);\r\n\r\n\t $( document ).on( \"idle.idleTimer\", function(event, elem, obj){\r\n\t // function you want to fire when the user goes idle\r\n\t toastr.warning('Your session is about to expire. The page will redirect after 15 seconds with no activity.','Session Timeout Notification',{\r\n\t \"progressBar\": true,\r\n\t \"timeOut\": 5000,\r\n\t });\r\n\t idle_timer = setTimeout(timeOutHandler,5000);\r\n\t });\r\n\r\n\t $( document ).on( \"active.idleTimer\", function(event, elem, obj, triggerevent){\r\n\t // function you want to fire when the user becomes active again\r\n\t clearTimeout(idle_timer);\r\n\t $( document ).idleTimer(\"reset\");\r\n\t toastr.clear();\r\n\t toastr.success('You returned to the active mode.','You are back.');\r\n\t });\r\n\r\n\t function timeOutHandler() {\r\n\t reset();\r\n\t alert('Your session has expired. You can redirect this page or logout.');\r\n\t }\r\n\t }\r\n\t })();\r\n }\r\n\r\n //TODO: Replace with initWalletEffects() method.\r\n static initWalletLayout() {\r\n }\r\n\r\n\tstatic initPage() {\r\n\r\n\t // Activate bootstrap select\r\n\t if($(\".selectpicker\").length>0) {\r\n\t $('.selectpicker').selectpicker();\r\n }\r\n\r\n $('.select2').select2();\r\n\r\n\t // Activate Tooltips\r\n\t $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n\t // Activate Popovers\r\n\t $('[data-toggle=\"popover\"]').popover();\r\n\r\n\t // Activate slimscroll\r\n\t $('.scroller').each(function(){\r\n\t $(this).slimScroll({\r\n\t height: $(this).attr('data-height') || '100%',\r\n\t color: $(this).attr('data-color') || '#71808f',\r\n\t railOpacity: '0.9',\r\n\t size: '4px',\r\n\t });\r\n\t });\r\n\r\n $('.slimScrollBar').hide();\r\n\r\n\t\t// PANEL ACTIONS\r\n\t // ======================\r\n\r\n\t $('.ibox-collapse').click(function(){\r\n\t \tvar ibox = $(this).closest('div.ibox');\r\n\t \tibox.toggleClass('collapsed-mode').children('.ibox-body').slideToggle(200);\r\n\t });\r\n\t $('.ibox-remove').click(function(){\r\n\t \t$(this).closest('div.ibox').remove();\r\n\t });\r\n\t $('.fullscreen-link').click(function(){\r\n\t if($('body').hasClass('fullscreen-mode')) {\r\n\t $('body').removeClass('fullscreen-mode');\r\n\t $(this).closest('div.ibox').removeClass('ibox-fullscreen');\r\n\t $(window).off('keydown',toggleFullscreen);\r\n\t } else {\r\n\t $('body').addClass('fullscreen-mode');\r\n\t $(this).closest('div.ibox').addClass('ibox-fullscreen');\r\n\t $(window).on('keydown', toggleFullscreen);\r\n\t }\r\n\t });\r\n\t function toggleFullscreen(e) {\r\n\t // pressing the ESC key - KEY_ESC = 27\r\n\t if(e.which == 27) {\r\n\t $('body').removeClass('fullscreen-mode');\r\n\t $('.ibox-fullscreen').removeClass('ibox-fullscreen');\r\n\t $(window).off('keydown',toggleFullscreen);\r\n\t }\r\n\t }\r\n\r\n }\r\n\r\n static showCustomTooltip(show: boolean, elementId: string, placement?: string, title?: string) {\r\n if (show) {\r\n $(`#${elementId}`).tooltip({ trigger: 'manual', placement: placement, title: title });\r\n $(`#${elementId}`).tooltip('show');\r\n } else {\r\n $(`#${elementId}`).tooltip('hide');\r\n }\r\n }\r\n\r\n static showPopover(elementId: string) {\r\n $(`#${elementId}`).popover('toggle');\r\n $('body').addClass('popover-show');\r\n }\r\n\r\n static hidePopover(elementId: string) {\r\n $(`#${elementId}`).popover('toggle');\r\n $('body').removeClass('popover-show');\r\n }\r\n\r\n static showToastrNotification(type: string, text: string, options: any) {\r\n switch (type) {\r\n case 'success':\r\n toastr.success(text, options);\r\n break;\r\n case 'info':\r\n toastr.info(text, options);\r\n break;\r\n case 'warning':\r\n toastr.warning(text, options);\r\n break;\r\n case 'error':\r\n toastr.error(text, options);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n static hideModals() {\r\n $('.modal').modal('hide');\r\n }\r\n\r\n static setCurrentStep(currentStep: string, nextStep: string) {\r\n $(`.${currentStep}`).removeClass('current').addClass('done');\r\n $(`.${nextStep}`).removeClass('disabled').addClass('current');\r\n }\r\n\r\n static setFinishStep(lastStep: string) {\r\n $(`.${lastStep}`).addClass('done');\r\n }\r\n\r\n static changeInputType(type: string, ...elementClasses) {\r\n elementClasses.forEach(function (className) {\r\n $(`.${className}`).attr('type', type);\r\n });\r\n }\r\n\r\n static addClass(elementId: string, className: string) {\r\n $(`#${elementId}`).addClass(className);\r\n }\r\n\r\n static removeClass(elementId: string, className: string) {\r\n $(`#${elementId}`).removeClass(className);\r\n }\r\n\r\n static renderMarketPriceChart(elementId: string, dataSeries: any, fromTime: number, toTime, currencySymbol: string, coinName: string) {\r\n var options = {\r\n chart: {\r\n type: 'area',\r\n height: 400,\r\n toolbar: {\r\n show: false,\r\n },\r\n },\r\n colors: ['#14c2dc'],\r\n dataLabels: {\r\n enabled: false\r\n },\r\n stroke: {\r\n curve: 'smooth'\r\n },\r\n series: [{\r\n name: coinName,\r\n data: dataSeries\r\n },\r\n\r\n ],\r\n markers: {\r\n size: 0,\r\n style: 'hollow',\r\n },\r\n xaxis: {\r\n type: 'datetime',\r\n min: fromTime,\r\n max: toTime,\r\n tickAmount: 6,\r\n },\r\n tooltip: {\r\n x: {\r\n format: 'dd MMM yyyy'\r\n }\r\n },\r\n fill: {\r\n type: 'gradient',\r\n gradient: {\r\n shadeIntensity: 1,\r\n opacityFrom: 0.4,\r\n opacityTo: 0.9,\r\n stops: [0, 100]\r\n }\r\n },\r\n yaxis: {\r\n labels: {\r\n formatter: function (val, index) {\r\n return new Intl.NumberFormat('en', {\r\n style: 'currency',\r\n currency: currencySymbol,\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2,\r\n }).format(val);\r\n }\r\n }\r\n },\r\n };\r\n\r\n if (typeof ApexCharts === 'undefined') {\r\n console.warn('Apex chart is undefined.');\r\n } else {\r\n marketPriceChart = new ApexCharts(\r\n document.querySelector(`#${elementId}`),\r\n options\r\n );\r\n marketPriceChart.render();\r\n }\r\n }\r\n\r\n static updateMarketPriceChart(fromTime: number, toTime) {\r\n marketPriceChart.updateOptions({\r\n xaxis: {\r\n type: 'datetime',\r\n min: fromTime,\r\n max: toTime,\r\n tickAmount: 6,\r\n },\r\n });\r\n }\r\n\r\n static updateMarketPriceDataSeries(fromTime: number, toTime, dataSeries: any, coinName: string) {\r\n marketPriceChart.updateOptions({\r\n xaxis: {\r\n type: 'datetime',\r\n min: fromTime,\r\n max: toTime,\r\n tickAmount: 6,\r\n },\r\n series: [{\r\n name: coinName,\r\n data: dataSeries\r\n }],\r\n });\r\n }\r\n\r\n static destroyMarketPriceChart() {\r\n try {\r\n if (marketPriceChart) {\r\n marketPriceChart.destroy();\r\n }\r\n } catch (e) {\r\n console.warn(e);\r\n }\r\n }\r\n\r\n static WalletLoading(show: boolean) {\r\n if (show) {\r\n $('#loading').remove();\r\n $('body').append(\"
LOADING
\");\r\n $('.acc-balance').hide();\r\n } else {\r\n $('#loading').fadeOut(500);\r\n setTimeout(function () {\r\n $('#loading').remove();\r\n }, 1000);\r\n $('.syncing').remove();\r\n $('ul.home-links li:nth-child(3) a').show();\r\n $('.acc-balance').show();\r\n }\r\n }\r\n\r\n static StartLoading(show: boolean) {\r\n if (show) {\r\n $('#loading').remove();\r\n $('body').append(\"
LOADING
\");\r\n } else {\r\n $('#loading').fadeOut(500);\r\n setTimeout(function () {\r\n $('#loading').remove();\r\n }, 1000);\r\n }\r\n }\r\n\r\n static initLastTransactions(tableClassName) {\r\n $(function () {\r\n $(\"#filter-search\").on(\"keyup\", function () {\r\n var value = $(this).val().toLowerCase();\r\n $(`.${tableClassName} tr`).filter(function () {\r\n $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)\r\n });\r\n });\r\n });\r\n }\r\n\r\n static initTransactionsHistory(tableClassName) {\r\n oTable = $(`.${tableClassName}`).DataTable({\r\n \"ordering\": false,\r\n \"info\": false,\r\n \"lengthChange\": false,\r\n \"fnDrawCallback\": function (oSettings) {\r\n $(oSettings.nTHead).hide();\r\n },\r\n \"language\": {\r\n \"paginate\": {\r\n \"previous\": \"<\",\r\n \"next\": \">\"\r\n }\r\n }\r\n });\r\n $('#filter-search').keyup(function () {\r\n oTable.search($(this).val()).draw();\r\n });\r\n }\r\n\r\n static initWalletEffects() {\r\n this.initCoppyToClipboard();\r\n Waves.displayEffect();\r\n }\r\n\r\n static initCoppyToClipboard() {\r\n $(function () {\r\n new ClipboardJS('[data-clipboard]').on('success', function (e) {\r\n var x = document.getElementById(\"snackbar\");\r\n x.className = \"show\";\r\n setTimeout(function () { x.className = x.className.replace(\"show\", \"\"); }, 3000);\r\n });\r\n });\r\n }\r\n\r\n static toBtc(amountInSatoshi: number): string\r\n {\r\n\treturn (amountInSatoshi / 100000000).toFixed(8);\r\n }\r\n\r\n static setSettingFormClass() {\r\n if ($('section.home').hasClass('setting-form')) {\r\n $('section.home').removeClass('setting-form');\r\n } else {\r\n $('section.home').addClass('setting-form');\r\n }\r\n }\r\n\r\n static canSelectCoin(enable: boolean) {\r\n $('#btn-select-coin').prop( 'disabled', !enable );\r\n if (enable) {\r\n $('#dv-select-coin').tooltip('disable');\r\n } else {\r\n $('#dv-select-coin').tooltip('enable');\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LayoutMode } from '@core/models/layout-mode';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LayoutService {\r\n\r\n constructor() { }\r\n\r\n //#region Private members\r\n \r\n private _layout: LayoutMode = LayoutMode.Portfolio;\r\n private _layoutSource = new BehaviorSubject(LayoutMode.Portfolio);\r\n\r\n //#endregion\r\n\r\n //#region Events\r\n\r\n onLayoutChange = this._layoutSource.asObservable();\r\n\r\n //#endregion\r\n\r\n public get Layout(): LayoutMode {\r\n return this._layout;\r\n }\r\n\r\n public set Layout(layoutMode: LayoutMode) {\r\n this._layout = layoutMode;\r\n this._layoutSource.next(this._layout);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {AuthConfig, OAuthService} from \"angular-oauth2-oidc\";\r\nimport { DialogService } from '@shared/dialog/_services/dialog.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GoogleOath2ProviderService {\r\n private readonly scopes = [\r\n {name: \"openid\", scope: \"openid\"},\r\n {name: \"profile\", scope: \"profile\"},\r\n {name: \"email\", scope: \"email\"},\r\n {name: \"google drive\", scope: \"https://www.googleapis.com/auth/drive.appdata\"},\r\n ];\r\n private readonly oAuthConfig: AuthConfig = {\r\n issuer: 'https://accounts.google.com',\r\n strictDiscoveryDocumentValidation: false,\r\n redirectUri: 'https://wallet.prokey.io',\r\n clientId: '559533547551-gha4dt8h6sd4l8foqd5gal1i6d6bo3jr.apps.googleusercontent.com',\r\n scope: this.scopes.map((value, index) => value.scope)\r\n .reduce((previousValue, currentValue) => previousValue + \" \" + currentValue)\r\n }\r\n\r\n constructor(private oAuthService: OAuthService, private dialogService: DialogService) {\r\n oAuthService.configure(this.oAuthConfig);\r\n oAuthService.setStorage(localStorage);\r\n oAuthService.setupAutomaticSilentRefresh();\r\n }\r\n\r\n async fetchToken() {\r\n // this.oAuthService.checkSession()\r\n this.oAuthService.loadDiscoveryDocument().then(() => {\r\n this.oAuthService.tryLoginImplicitFlow({\r\n // onTokenReceived: receivedTokens => {\r\n //\r\n // }\r\n }).then(() => {\r\n }).catch(error => {\r\n console.log(error);\r\n });\r\n }).catch(error => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n isLoggedIn(): boolean {\r\n return this.oAuthService.hasValidAccessToken();\r\n }\r\n\r\n haveSufficientScopes(): boolean {\r\n let grantedScopes = this.oAuthService.getGrantedScopes() as Array;\r\n for (const scope of this.scopes) {\r\n if (!grantedScopes.find((grantedScope, index )=> scope.scope.toLowerCase() == grantedScope.toLowerCase())) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n async logIn() {\r\n let isLoggedIn = this.isLoggedIn();\r\n if (!isLoggedIn) {\r\n await this.oAuthService.initLoginFlow();\r\n } else {\r\n await this.oAuthService.loadUserProfile();\r\n }\r\n\r\n }\r\n\r\n logout() {\r\n this.oAuthService.logOut();\r\n }\r\n\r\n getAccessToken(): string {\r\n return this.oAuthService.getAccessToken();\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ProkeySettings} from \"@core/models/prokey-settings\";\r\nimport {ProkeySettingsKey} from \"@core/models/prokey-settings-key.enum\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {WalletDeviceService} from \"./wallet-device.service\";\r\nimport {StorageService} from \"@core/services/storage/storage.service\";\r\nimport {BaseRepository} from \"@core/services/storage/repository/base-repository\";\r\nimport {LocalStorageService} from \"@core/services/storage/repository/local-storage-service\";\r\nimport {settings} from \"cluster\";\r\n\r\n/** this service is created to handle prokey settings with localstorage. */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProkeySettingsService {\r\n\r\n /** key for storing settings in localstorage. */\r\n private static readonly _prokeySettingsKey = 'PROKEY_SETTINGS';\r\n private static readonly _prokeySyncKey = 'PROKEY_SYNC';\r\n /** prokey settings */\r\n private _settings;\r\n /** the key where settings are stored in localstorage. */\r\n private _storageKey: string;\r\n private _deviceId: string;\r\n\r\n constructor(private _localStorage: LocalStorageService,\r\n private _storageService: StorageService,\r\n private _deviceService: WalletDeviceService) {}\r\n\r\n /** it will initial settings. */\r\n async initialize(): Promise {\r\n let device = await this._deviceService.device$\r\n .pipe(first()).toPromise(); // it will unsubscribe device$ after first value is emitted.\r\n\r\n try {\r\n if (device.features) {\r\n this._deviceId = device.features.device_id;\r\n } else {\r\n window.location.href = '/start';\r\n }\r\n } catch {\r\n window.location.href = '/start';\r\n }\r\n\r\n this._storageKey = ProkeySettingsService._prokeySettingsKey + '_' + this._deviceId;\r\n let syncData = this.retrieveSync() ?? undefined;\r\n if (syncData) {\r\n this._settings = syncData;\r\n await this._getBaseRepository().save(this._storageKey, syncData);\r\n this.deleteSync();\r\n } else {\r\n let prokeySettings = await this._getBaseRepository().get(this._storageKey);\r\n this._settings = prokeySettings ?? {};\r\n }\r\n }\r\n\r\n isInitialized() {\r\n return !!(this._storageKey && this._settings);\r\n }\r\n\r\n /** it gives you a certain field in settings. */\r\n get(key: ProkeySettingsKey) {\r\n return this._settings?.[key];\r\n }\r\n\r\n /** it will return you all settings. */\r\n getAll() {\r\n return {...this._settings};\r\n }\r\n\r\n /** it will change settings and store it in localstorage. */\r\n async save(key: ProkeySettingsKey, value: any): Promise {\r\n if (key && value) {\r\n this._settings[key] = value;\r\n await this._getBaseRepository().save(this._storageKey, this._settings);\r\n } else {\r\n console.error('saving settings failed !')\r\n }\r\n }\r\n\r\n /** it will patch a part to settings. */\r\n async patch(settings: Partial): Promise {\r\n if (this._settings && settings) {\r\n Object.assign(this._settings, settings);\r\n await this._getBaseRepository().save(this._storageKey, this._settings);\r\n }\r\n }\r\n\r\n /** it will delete a fields record. */\r\n delete(key: ProkeySettingsKey) {\r\n if (this._settings[key]) {\r\n this.save(key, undefined);\r\n }\r\n }\r\n\r\n async sync() {\r\n let localStorageSettings = this._localStorage.normalGet(this._storageKey);\r\n await this._storageService.getCurrentStorage(this._deviceId).save(this._storageKey, localStorageSettings);\r\n this._settings = localStorageSettings;\r\n }\r\n\r\n deleteSync() {\r\n this._localStorage.delete(ProkeySettingsService._prokeySyncKey + '_' + this._deviceId);\r\n }\r\n\r\n retrieveSync(): ProkeySettings {\r\n return this._localStorage.normalGet(ProkeySettingsService._prokeySyncKey + '_' + this._deviceId);\r\n }\r\n\r\n private _getBaseRepository(): BaseRepository {\r\n return this._storageService.getCurrentStorage(this._deviceId);\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport * as $ from 'jquery';\r\n\r\ndeclare let document: any;\r\n\r\ninterface Script {\r\n src: string;\r\n loaded: boolean;\r\n}\r\n\r\ninterface Style {\r\n href: string;\r\n media: string;\r\n loaded: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class ScriptLoaderService {\r\n\r\n constructor() { }\r\n\r\n private _scripts: Script[] = [];\r\n private _styles: Style[] = [];\r\n\r\n load(...scripts: string[]) {\r\n scripts.forEach((script: string) => this._scripts[script] = { src: script, loaded: false });\r\n\r\n let promises: any[] = [];\r\n scripts.forEach((script) => promises.push(this.loadScript(script)));\r\n return Promise.all(promises);\r\n }\r\n\r\n loadScript(src: string) {\r\n return new Promise((resolve, reject) => {\r\n\r\n //resolve if already loaded\r\n if (this._scripts[src].loaded) {\r\n resolve({ script: src, loaded: true, status: 'Already Loaded' });\r\n }\r\n else {\r\n //load script\r\n let script = $('