├── .gitignore ├── LICENSE.md ├── README.md ├── contracts ├── main │ ├── Migrations.ligo │ ├── balance_requester.ligo │ └── tzip_12_tutorial.ligo └── partials │ ├── balance_requester │ ├── action.ligo │ ├── request_balance.ligo │ └── storage.ligo │ └── tzip_12_tutorial │ ├── action.ligo │ ├── balance_of.ligo │ ├── balance_of_param.ligo │ ├── default_balance.ligo │ ├── get_with_default_nat.ligo │ ├── storage.ligo │ ├── transfer.ligo │ └── transfer_param.ligo ├── faucet.json ├── helpers ├── bigMapKeyNotFound.js ├── constants.js └── generateAddress.js ├── migrations ├── 1_deploy_tzip_12_tutorial.js └── 2_deploy_balance_requester.js ├── package-lock.json ├── package.json ├── scripts └── sandbox │ ├── accounts.js │ ├── docker │ ├── babylon │ │ ├── Dockerfile │ │ ├── build_sandbox_archive.sh │ │ └── mini_babylon_archive.sh │ └── carthage │ │ ├── Dockerfile │ │ ├── build_sandbox_archive.sh │ │ └── mini_carthage_archive.sh │ ├── kill_sandbox.sh │ ├── restart_sandbox.sh │ ├── start_sandbox.sh │ └── waitForNetwork.js ├── test └── tzip_12_tutorial.js ├── truffle-box.json └── truffle-config.js /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | node_modules/ -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # Released under MIT License 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tezos starter kit 2 | 3 | 4 | ## What is the tezos-starter-kit? 5 | 6 | The Tezos starter kit provides a *truffle box* with reasonable defaults to kick start your smart contract development experience. It includes a ready to use archive sandbox node with RPC & CORS configured. 7 | 8 | ## Dependencies 9 | 10 | - **Docker** - used to run a local Tezos node together with the LIGO compiler (If you're on linux, follow the post-installation steps as well) 11 | - **Node.js** - Javascript runtime environment that we'll use for testing and deployment 12 | - **truffle@tezos** - Testing framework, originally built for Ethereum that now includes support for Tezos. It can be installed by running: 13 | ``` 14 | npm i -g truffle@tezos 15 | ``` 16 | 17 | ## Getting started 18 | 19 | **Unbox the starter kit & install the dependencies** 20 | ```shell 21 | $ git clone https://github.com/stove-labs/tezos-starter-kit 22 | $ cd tezos-starter-kit 23 | $ npm i 24 | ``` 25 | 26 | **Compile the example contract** 27 | ```shell 28 | $ npm run compile 29 | ``` 30 | 31 | **Start the local sandbox node** 32 | ```shell 33 | $ npm run start-sandbox -- carthage 34 | ``` 35 | 36 | **Migrate the compiled contracts** 37 | ```shell 38 | $ npm run migrate 39 | ``` 40 | 41 | **Run the contract tests** 42 | ```shell 43 | $ npm run test 44 | ``` 45 | 46 | ## Sandbox management 47 | 48 | Archive mode sandbox Tezos node is provided within this box with RPC exposed at port `8732` and with two accounts that are generously funded. 49 | 50 | > You can start a sandbox with a specific protocol by passing an additional argument to the sandbox commands, e.g. `babylon` or `carthage` 51 | 52 | #### Commands 53 | 54 | ```shell 55 | $ npm run start-sandbox -- carthage 56 | $ npm run kill-sandbox -- carthage 57 | $ npm run restart-sandbox -- carthage 58 | ``` 59 | 60 | #### Available accounts 61 | |alias |pkh |pk |sk | 62 | |---|---|---|---| 63 | |alice |tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb |edpkvGfYw3LyB1UcCahKQk4rF2tvbMUk8GFiTuMjL75uGXrpvKXhjn |edsk3QoqBuvdamxouPhin7swCvkQNgq4jP5KZPbwWNnwdZpSpJiEbq | 64 | |bob |tz1aSkwEot3L2kmUvcoxzjMomb9mvBNuzFK6 |edpkurPsQ8eUApnLUJ9ZPDvu98E8VNj4KtJa1aZr16Cr5ow5VHKnz4 |edsk3RFfvaFaxbHx8BMtEW1rKQcPtDML3LXjNqMNLCzC3wLC1bWbAt | 65 | 66 | ## Usage with public testnets (Babylonnet, Carthagenet, ...) 67 | 68 | In order to use your migration scripts with a different network than your local sandbox, you can specify an optional `--network` argument. 69 | 70 | Make sure to [claim a new account at the faucet](https://faucet.tzalpha.net), and replace the `faucet.json` file with the new one downloaded previously. 71 | ```shell 72 | $ truffle migrate --network carthagenet 73 | ``` 74 | -------------------------------------------------------------------------------- /contracts/main/Migrations.ligo: -------------------------------------------------------------------------------- 1 | type migrations is record 2 | owner : address; 3 | last_completed_migration : int; 4 | end 5 | 6 | function main (const completed_migration: int ; var migrations : migrations) : (list(operation) * migrations) is 7 | block { 8 | if sender =/= migrations.owner 9 | then 10 | skip 11 | else 12 | migrations.last_completed_migration := completed_migration; 13 | } with ((nil : list(operation)), migrations); 14 | -------------------------------------------------------------------------------- /contracts/main/balance_requester.ligo: -------------------------------------------------------------------------------- 1 | #include "../partials/balance_requester/action.ligo" 2 | #include "../partials/balance_requester/storage.ligo" 3 | #include "../partials/balance_requester/request_balance.ligo" 4 | 5 | function main ( 6 | const action : balance_requester_action; 7 | var storage : balance_requester_storage 8 | ) : (list(operation) * balance_requester_storage) 9 | is (case action of 10 | | Request_balance(request_balance_of_param) -> request_balance(request_balance_of_param, storage) 11 | | Receive_balance(receive_balance_of_param) -> ((nil : list(operation)), receive_balance_of_param) 12 | end) -------------------------------------------------------------------------------- /contracts/main/tzip_12_tutorial.ligo: -------------------------------------------------------------------------------- 1 | #include "../partials/tzip_12_tutorial/action.ligo" 2 | #include "../partials/tzip_12_tutorial/storage.ligo" 3 | #include "../partials/tzip_12_tutorial/transfer.ligo" 4 | #include "../partials/tzip_12_tutorial/balance_of.ligo" 5 | 6 | (* Default function that represents our contract, it's sole purpose here is the entrypoint routing *) 7 | function main (const action : action; var storage : storage) : (list(operation) * storage) 8 | is (case action of 9 | (* 10 | Unwrap the `Transfer(...)` parameters and invoke the transfer function. 11 | The return value of `transfer(...)` is then returned as a result of `main(...)` as well. 12 | *) 13 | | Transfer(transfer_param) -> transfer(transfer_param, storage) 14 | | Balance_of(balance_of_param) -> balance_of(balance_of_param, storage) 15 | (* This is just a placeholder *) 16 | | U -> ((nil : list(operation)), storage) 17 | end) -------------------------------------------------------------------------------- /contracts/partials/balance_requester/action.ligo: -------------------------------------------------------------------------------- 1 | #include "../tzip_12_tutorial/balance_of_param.ligo" 2 | 3 | type request_balance_of_param is record 4 | at : address; 5 | requests : list_of_balance_requests; 6 | end; 7 | type receive_balance_of_param is list_of_balance_responses; 8 | 9 | type balance_requester_action is 10 | | Request_balance of request_balance_of_param 11 | | Receive_balance of receive_balance_of_param; -------------------------------------------------------------------------------- /contracts/partials/balance_requester/request_balance.ligo: -------------------------------------------------------------------------------- 1 | #include "storage.ligo" 2 | #include "../tzip_12_tutorial/balance_of_param.ligo" 3 | 4 | const current_contract : address = self_address; 5 | 6 | function request_balance ( 7 | const request_balance_of_param : request_balance_of_param; 8 | const storage : balance_requester_storage 9 | ) : (list(operation) * balance_requester_storage) 10 | is begin 11 | (* Get the TZIP-12 contract instance 'from' the chain *) 12 | const token_contract_balance_entrypoint : contract(balance_of_param) = get_entrypoint( 13 | // which entrypoint we want to call 14 | "%balance_of", 15 | // at which contract address this entrypoint can be found 16 | request_balance_of_param.at 17 | ); 18 | 19 | (* Callback (contract) for Balance_of will be the current contract's Receive_balance entrypoint *) 20 | const balance_of_callback_contract : balance_of_callback_contract = get_entrypoint("%receive_balance", current_contract); 21 | 22 | (* Set up the parameter w/ data required for the Balance_of entrypoint *) 23 | const balance_of_operation_param : balance_of_param = record 24 | requests = request_balance_of_param.requests; 25 | callback = balance_of_callback_contract; 26 | end; 27 | 28 | (* 29 | Forge an internal transaction to the TZIP-12 contract 30 | parametrised by the prieviously prepared `balance_of_operation_param` 31 | 32 | Note: We're sending 0mutez as part of this transaction 33 | *) 34 | const balance_of_operation : operation = transaction( 35 | balance_of_operation_param, 36 | 0mutez, 37 | token_contract_balance_entrypoint 38 | ); 39 | 40 | const operations : list(operation) = list 41 | balance_of_operation 42 | end; 43 | 44 | skip; 45 | end with (operations, storage); 46 | -------------------------------------------------------------------------------- /contracts/partials/balance_requester/storage.ligo: -------------------------------------------------------------------------------- 1 | #include "../tzip_12_tutorial/balance_of_param.ligo" 2 | type balance_requester_storage is list_of_balance_responses; -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/action.ligo: -------------------------------------------------------------------------------- 1 | #include "transfer_param.ligo" 2 | #include "balance_of_param.ligo" 3 | 4 | type action is 5 | (* Our simplified implementation only supports the Transfer entrypoint *) 6 | | Transfer of transfer_param 7 | | Balance_of of balance_of_param 8 | 9 | (* This is just a placeholder *) 10 | | U -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/balance_of.ligo: -------------------------------------------------------------------------------- 1 | #include "get_with_default_nat.ligo" 2 | #include "default_balance.ligo" 3 | #include "balance_of_param.ligo" 4 | 5 | function balance_of ( 6 | const balance_of_param : balance_of_param; 7 | const storage : storage 8 | ) : (list(operation) * storage) 9 | is block { 10 | 11 | (* Find balances for all the requested token_id and token_owner combinations *) 12 | function balance_request_iterator (const balance_request : balance_request) : balance_response 13 | is block { 14 | const token_balance : token_balance = get_with_default_nat( 15 | storage[balance_request.owner], 16 | default_balance 17 | ); 18 | } with record 19 | request = balance_request; 20 | balance = token_balance 21 | end; 22 | 23 | const balance_of_callback_param : balance_of_callback_param = list_map( 24 | balance_request_iterator, 25 | balance_of_param.requests 26 | ); 27 | 28 | (* 29 | Forge an internal transaction to the callback contract, 30 | sending back the processed map of balance requests/responses 31 | *) 32 | const balance_of_response_operation : operation = transaction( 33 | balance_of_callback_param, 34 | 0mutez, 35 | balance_of_param.callback 36 | ); 37 | 38 | const operations : list(operation) = list 39 | balance_of_response_operation 40 | end; 41 | 42 | skip; 43 | } with (operations, storage) -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/balance_of_param.ligo: -------------------------------------------------------------------------------- 1 | #include "transfer_param.ligo" 2 | type balance_request is record 3 | owner : address; 4 | token_id : token_id; 5 | end; 6 | 7 | type balance_response is record 8 | request : balance_request; 9 | balance : nat; 10 | end; 11 | 12 | type list_of_balance_responses is list(balance_response); 13 | type list_of_balance_requests is list(balance_request); 14 | 15 | type balance_of_callback_param is list_of_balance_responses; 16 | type balance_of_callback_contract is contract(balance_of_callback_param); 17 | type balance_of_param is record 18 | requests : list_of_balance_requests; 19 | callback : balance_of_callback_contract; 20 | end; -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/default_balance.ligo: -------------------------------------------------------------------------------- 1 | const default_balance : nat = 0n; -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/get_with_default_nat.ligo: -------------------------------------------------------------------------------- 1 | function get_with_default_nat(const option : option(nat); const default : nat) : nat 2 | is case option of 3 | | Some(value) -> value 4 | | None -> default 5 | end -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/storage.ligo: -------------------------------------------------------------------------------- 1 | (* Alias types to new names for better readability *) 2 | type token_owner is address; 3 | type token_balance is nat; 4 | type token_balances is big_map(token_owner, token_balance); 5 | 6 | (* Storage type for the tzip-12 tutorial smart contract *) 7 | type storage is token_balances; -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/transfer.ligo: -------------------------------------------------------------------------------- 1 | #include "get_with_default_nat.ligo" 2 | #include "default_balance.ligo" 3 | 4 | function transfer (const transfer_param : transfer_param; var storage : storage) : (list(operation) * storage) 5 | is begin 6 | function transfer_iterator (const storage : storage; const transfer : transfer) : storage 7 | is begin 8 | (* You're only allowed to transfer your own tokens *) 9 | if sender =/= transfer.from_ then failwith("Address from_ needs to be equal to the sender") else skip; 10 | (* Allow transfer only if the sender has a sufficient balance *) 11 | if get_with_default_nat(storage[transfer.from_], default_balance) < transfer.amount then failwith("Insufficient balance") else skip; 12 | (* Update the ledger accordingly *) 13 | storage[transfer.from_] := abs(get_with_default_nat(storage[transfer.from_], default_balance) - transfer.amount); 14 | storage[transfer.to_] := get_with_default_nat(storage[transfer.to_], default_balance) + transfer.amount; 15 | end with storage; 16 | 17 | storage := list_fold(transfer_iterator, transfer_param, storage); 18 | end with ((nil : list(operation)), storage) -------------------------------------------------------------------------------- /contracts/partials/tzip_12_tutorial/transfer_param.ligo: -------------------------------------------------------------------------------- 1 | #include "storage.ligo" 2 | 3 | type token_id is nat; 4 | 5 | type transfer is record 6 | token_id : token_id; 7 | amount : token_balance; 8 | from_ : token_owner; 9 | to_ : token_owner; 10 | end; 11 | 12 | type transfer_param is list(transfer) -------------------------------------------------------------------------------- /faucet.json: -------------------------------------------------------------------------------- 1 | { 2 | "mnemonic": [ 3 | "later", 4 | "sign", 5 | "team", 6 | "luggage", 7 | "advance", 8 | "ostrich", 9 | "link", 10 | "hurdle", 11 | "deer", 12 | "nerve", 13 | "dial", 14 | "twelve", 15 | "excuse", 16 | "frost", 17 | "poet" 18 | ], 19 | "secret": "161bebc6578b94f5cb436d76bc726547d7ed6e75", 20 | "amount": "3029315788", 21 | "pkh": "tz1NkT6YCFS3mDo6kfaMFKFrRiA7w2o5dkWp", 22 | "password": "P4kshmGAnr", 23 | "email": "npbrbseo.jzbkncgx@tezos.example.org" 24 | } -------------------------------------------------------------------------------- /helpers/bigMapKeyNotFound.js: -------------------------------------------------------------------------------- 1 | /** 2 | * If the requested big_map key is not found, the response will be a 404 HttpResponseError 3 | */ 4 | module.exports = error => { 5 | return error.status === 404; 6 | } -------------------------------------------------------------------------------- /helpers/constants.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | unit: undefined, 3 | rpcErrors: { 4 | michelson: { 5 | scriptRejected: "proto.005-PsBabyM1.michelson_v1.script_rejected", 6 | runtimeError: "proto.005-PsBabyM1.michelson_v1.runtime_error" 7 | } 8 | }, 9 | contractErrors: { 10 | fromEqualToSenderAddress: "Address from_ needs to be equal to the sender", 11 | insufficientBalance: "Insufficient balance" 12 | } 13 | }; -------------------------------------------------------------------------------- /helpers/generateAddress.js: -------------------------------------------------------------------------------- 1 | const eztz = require('eztz.js').eztz; 2 | function generateAddress() { 3 | let mnemonic = eztz.crypto.generateMnemonic(); // generate mnemonic phrase 4 | let password = Math.random().toString(36).substring(2, 15); // generate password 5 | let wallet = eztz.crypto.generateKeys(mnemonic, password); // create wallet by password and mnemonic 6 | return wallet.pkh; 7 | }; 8 | 9 | module.exports = generateAddress -------------------------------------------------------------------------------- /migrations/1_deploy_tzip_12_tutorial.js: -------------------------------------------------------------------------------- 1 | const tzip_12 = artifacts.require('tzip_12_tutorial'); 2 | const { alice } = require('./../scripts/sandbox/accounts'); 3 | 4 | const token_balance = 10; 5 | const initial_storage = { 6 | [`${alice.pkh}`]: token_balance 7 | }; 8 | 9 | module.exports = async (deployer, network, accounts) => { 10 | await deployer.deploy(tzip_12, initial_storage); 11 | }; 12 | module.exports.initial_storage = initial_storage; 13 | -------------------------------------------------------------------------------- /migrations/2_deploy_balance_requester.js: -------------------------------------------------------------------------------- 1 | const balance_requester = artifacts.require('balance_requester'); 2 | 3 | const initial_storage = []; 4 | 5 | module.exports = async (deployer, network, accounts) => { 6 | await deployer.deploy(balance_requester, initial_storage); 7 | }; 8 | 9 | module.exports.initial_storage = initial_storage; -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tezos-starter-kit", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@taquito/http-utils": { 8 | "version": "6.0.3-beta.0", 9 | "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-6.0.3-beta.0.tgz", 10 | "integrity": "sha512-UfNzDUFxPn8E94DeQv4YeBpCASeJcoV4vhq/YjF58eIrh2wWQKJKnvM1Kr/dkQCM4akGhCsF32u+67HsNs9JPw==", 11 | "dev": true, 12 | "requires": { 13 | "xhr2-cookies": "^1.1.0" 14 | } 15 | }, 16 | "@taquito/indexer": { 17 | "version": "6.0.3-beta.0", 18 | "resolved": "https://registry.npmjs.org/@taquito/indexer/-/indexer-6.0.3-beta.0.tgz", 19 | "integrity": "sha512-yntLD5d0YM94FM8iWOoMI68yJUaIlkHQzj8vmk+Tilutn7IHjj/8zZjAyApVdWk7e4BErGNvLaBHwXv34+m9kQ==", 20 | "dev": true, 21 | "requires": { 22 | "@taquito/http-utils": "^6.0.3-beta.0", 23 | "bignumber.js": "^9.0.0" 24 | }, 25 | "dependencies": { 26 | "bignumber.js": { 27 | "version": "9.0.0", 28 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 29 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 30 | "dev": true 31 | } 32 | } 33 | }, 34 | "@taquito/michelson-encoder": { 35 | "version": "6.0.3-beta.0", 36 | "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-6.0.3-beta.0.tgz", 37 | "integrity": "sha512-JRjgvTErC1T9erehuRVPt9ymB03gLBWy0DpwScOuvqhietaYrJohQydL+Ae0VvllFtQ8BIrTXkU3SDsb+M/g2A==", 38 | "dev": true, 39 | "requires": { 40 | "@taquito/utils": "^6.0.3-beta.0", 41 | "bignumber.js": "^9.0.0" 42 | }, 43 | "dependencies": { 44 | "bignumber.js": { 45 | "version": "9.0.0", 46 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 47 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 48 | "dev": true 49 | } 50 | } 51 | }, 52 | "@taquito/rpc": { 53 | "version": "6.0.3-beta.0", 54 | "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-6.0.3-beta.0.tgz", 55 | "integrity": "sha512-isZ6wV9jr1MlCARTLtApTo4stWRWd85XB2lUScXHyL3M7gzTrhkD3JvpwLTbN7f5AiB3Z6PO9b7dyPi95c5Dkw==", 56 | "dev": true, 57 | "requires": { 58 | "@taquito/http-utils": "^6.0.3-beta.0", 59 | "bignumber.js": "^9.0.0", 60 | "lodash": "^4.17.15" 61 | }, 62 | "dependencies": { 63 | "bignumber.js": { 64 | "version": "9.0.0", 65 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 66 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 67 | "dev": true 68 | } 69 | } 70 | }, 71 | "@taquito/signer": { 72 | "version": "6.0.3-beta.0", 73 | "resolved": "https://registry.npmjs.org/@taquito/signer/-/signer-6.0.3-beta.0.tgz", 74 | "integrity": "sha512-RAf1LvAmfTyJ4KVYxVoKbQFWn8w8P5XCWI3cbslVyE4kpG5Ax6BjzpDLw6tGYcaaX8DrzJag9z+3xSZP+puxuA==", 75 | "dev": true, 76 | "requires": { 77 | "@taquito/utils": "^6.0.3-beta.0", 78 | "bignumber.js": "^9.0.0", 79 | "bip39": "^3.0.2", 80 | "elliptic": "^6.5.1", 81 | "libsodium-wrappers": "^0.7.5", 82 | "pbkdf2": "^3.0.17", 83 | "typedarray-to-buffer": "^3.1.5" 84 | }, 85 | "dependencies": { 86 | "bignumber.js": { 87 | "version": "9.0.0", 88 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 89 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 90 | "dev": true 91 | }, 92 | "bip39": { 93 | "version": "3.0.2", 94 | "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", 95 | "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", 96 | "dev": true, 97 | "requires": { 98 | "@types/node": "11.11.6", 99 | "create-hash": "^1.1.0", 100 | "pbkdf2": "^3.0.9", 101 | "randombytes": "^2.0.1" 102 | } 103 | }, 104 | "libsodium": { 105 | "version": "0.7.6", 106 | "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.6.tgz", 107 | "integrity": "sha512-hPb/04sEuLcTRdWDtd+xH3RXBihpmbPCsKW/Jtf4PsvdyKh+D6z2D2gvp/5BfoxseP+0FCOg66kE+0oGUE/loQ==", 108 | "dev": true 109 | }, 110 | "libsodium-wrappers": { 111 | "version": "0.7.6", 112 | "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.6.tgz", 113 | "integrity": "sha512-OUO2CWW5bHdLr6hkKLHIKI4raEkZrf3QHkhXsJ1yCh6MZ3JDA7jFD3kCATNquuGSG6MjjPHQIQms0y0gBDzjQg==", 114 | "dev": true, 115 | "requires": { 116 | "libsodium": "0.7.6" 117 | } 118 | } 119 | } 120 | }, 121 | "@taquito/taquito": { 122 | "version": "6.0.3-beta.0", 123 | "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-6.0.3-beta.0.tgz", 124 | "integrity": "sha512-l7OtWM1s3sPHgrtsZPGXAi3Dj76Ko0PVXRKjuPa305FF/POLR56+7V8hixikkNFSt9GUF58l13ZBy0ol6Nti6A==", 125 | "dev": true, 126 | "requires": { 127 | "@taquito/indexer": "^6.0.3-beta.0", 128 | "@taquito/michelson-encoder": "^6.0.3-beta.0", 129 | "@taquito/rpc": "^6.0.3-beta.0", 130 | "@taquito/signer": "^6.0.3-beta.0", 131 | "@taquito/utils": "^6.0.3-beta.0", 132 | "bignumber.js": "^9.0.0", 133 | "rxjs": "^6.5.3" 134 | }, 135 | "dependencies": { 136 | "bignumber.js": { 137 | "version": "9.0.0", 138 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 139 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 140 | "dev": true 141 | } 142 | } 143 | }, 144 | "@taquito/utils": { 145 | "version": "6.0.3-beta.0", 146 | "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-6.0.3-beta.0.tgz", 147 | "integrity": "sha512-qNSLEO/5x7DpnaSdxyieJ7Xl+RyfACOw8rq+S2UMCiDVNC/dk2bjb4nrEUVfDr9COQ57lippLCjo7GPdSE8G+g==", 148 | "dev": true, 149 | "requires": { 150 | "blakejs": "^1.1.0", 151 | "bs58check": "^2.1.2", 152 | "buffer": "^5.2.1" 153 | } 154 | }, 155 | "@types/node": { 156 | "version": "11.11.6", 157 | "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", 158 | "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", 159 | "dev": true 160 | }, 161 | "ansi-regex": { 162 | "version": "2.1.1", 163 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 164 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 165 | "dev": true 166 | }, 167 | "ansi-styles": { 168 | "version": "2.2.1", 169 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 170 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 171 | "dev": true 172 | }, 173 | "app-module-path": { 174 | "version": "2.2.0", 175 | "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", 176 | "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", 177 | "dev": true 178 | }, 179 | "argv": { 180 | "version": "0.0.2", 181 | "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", 182 | "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", 183 | "dev": true 184 | }, 185 | "asn1": { 186 | "version": "0.2.4", 187 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 188 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 189 | "dev": true, 190 | "requires": { 191 | "safer-buffer": "~2.1.0" 192 | } 193 | }, 194 | "assert-plus": { 195 | "version": "0.2.0", 196 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 197 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", 198 | "dev": true 199 | }, 200 | "asynckit": { 201 | "version": "0.4.0", 202 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 203 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 204 | "dev": true 205 | }, 206 | "aws-sign2": { 207 | "version": "0.6.0", 208 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 209 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", 210 | "dev": true 211 | }, 212 | "aws4": { 213 | "version": "1.9.1", 214 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", 215 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", 216 | "dev": true 217 | }, 218 | "balanced-match": { 219 | "version": "1.0.0", 220 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 221 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 222 | "dev": true 223 | }, 224 | "base-x": { 225 | "version": "3.0.7", 226 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.7.tgz", 227 | "integrity": "sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw==", 228 | "dev": true, 229 | "requires": { 230 | "safe-buffer": "^5.0.1" 231 | } 232 | }, 233 | "base64-js": { 234 | "version": "1.3.1", 235 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 236 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", 237 | "dev": true 238 | }, 239 | "bcrypt-pbkdf": { 240 | "version": "1.0.2", 241 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 242 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 243 | "dev": true, 244 | "requires": { 245 | "tweetnacl": "^0.14.3" 246 | } 247 | }, 248 | "bignumber.js": { 249 | "version": "7.2.1", 250 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", 251 | "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", 252 | "dev": true 253 | }, 254 | "bip39": { 255 | "version": "2.6.0", 256 | "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz", 257 | "integrity": "sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==", 258 | "dev": true, 259 | "requires": { 260 | "create-hash": "^1.1.0", 261 | "pbkdf2": "^3.0.9", 262 | "randombytes": "^2.0.1", 263 | "safe-buffer": "^5.0.1", 264 | "unorm": "^1.3.3" 265 | } 266 | }, 267 | "blakejs": { 268 | "version": "1.1.0", 269 | "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", 270 | "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U=", 271 | "dev": true 272 | }, 273 | "bn.js": { 274 | "version": "4.11.8", 275 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 276 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", 277 | "dev": true 278 | }, 279 | "boom": { 280 | "version": "2.10.1", 281 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 282 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 283 | "dev": true, 284 | "requires": { 285 | "hoek": "2.x.x" 286 | } 287 | }, 288 | "brace-expansion": { 289 | "version": "1.1.11", 290 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 291 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 292 | "dev": true, 293 | "requires": { 294 | "balanced-match": "^1.0.0", 295 | "concat-map": "0.0.1" 296 | } 297 | }, 298 | "brorand": { 299 | "version": "1.1.0", 300 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 301 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 302 | "dev": true 303 | }, 304 | "browser-stdout": { 305 | "version": "1.3.1", 306 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 307 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 308 | "dev": true 309 | }, 310 | "bs58": { 311 | "version": "4.0.1", 312 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 313 | "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", 314 | "dev": true, 315 | "requires": { 316 | "base-x": "^3.0.2" 317 | } 318 | }, 319 | "bs58check": { 320 | "version": "2.1.2", 321 | "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", 322 | "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", 323 | "dev": true, 324 | "requires": { 325 | "bs58": "^4.0.0", 326 | "create-hash": "^1.1.0", 327 | "safe-buffer": "^5.1.2" 328 | } 329 | }, 330 | "buffer": { 331 | "version": "5.4.3", 332 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", 333 | "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", 334 | "dev": true, 335 | "requires": { 336 | "base64-js": "^1.0.2", 337 | "ieee754": "^1.1.4" 338 | } 339 | }, 340 | "caseless": { 341 | "version": "0.11.0", 342 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", 343 | "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", 344 | "dev": true 345 | }, 346 | "chalk": { 347 | "version": "1.1.3", 348 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 349 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 350 | "dev": true, 351 | "requires": { 352 | "ansi-styles": "^2.2.1", 353 | "escape-string-regexp": "^1.0.2", 354 | "has-ansi": "^2.0.0", 355 | "strip-ansi": "^3.0.0", 356 | "supports-color": "^2.0.0" 357 | } 358 | }, 359 | "cipher-base": { 360 | "version": "1.0.4", 361 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 362 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 363 | "dev": true, 364 | "requires": { 365 | "inherits": "^2.0.1", 366 | "safe-buffer": "^5.0.1" 367 | } 368 | }, 369 | "codecov": { 370 | "version": "2.3.1", 371 | "resolved": "https://registry.npmjs.org/codecov/-/codecov-2.3.1.tgz", 372 | "integrity": "sha1-fdqUXNWKH2CBAltbA+4Bou8g+G4=", 373 | "dev": true, 374 | "requires": { 375 | "argv": "0.0.2", 376 | "request": "2.77.0", 377 | "urlgrey": "0.4.4" 378 | } 379 | }, 380 | "combined-stream": { 381 | "version": "1.0.8", 382 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 383 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 384 | "dev": true, 385 | "requires": { 386 | "delayed-stream": "~1.0.0" 387 | } 388 | }, 389 | "commander": { 390 | "version": "2.20.3", 391 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 392 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 393 | "dev": true 394 | }, 395 | "concat-map": { 396 | "version": "0.0.1", 397 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 398 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 399 | "dev": true 400 | }, 401 | "cookiejar": { 402 | "version": "2.1.2", 403 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", 404 | "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", 405 | "dev": true 406 | }, 407 | "core-util-is": { 408 | "version": "1.0.2", 409 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 410 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 411 | "dev": true 412 | }, 413 | "create-hash": { 414 | "version": "1.2.0", 415 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 416 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 417 | "dev": true, 418 | "requires": { 419 | "cipher-base": "^1.0.1", 420 | "inherits": "^2.0.1", 421 | "md5.js": "^1.3.4", 422 | "ripemd160": "^2.0.1", 423 | "sha.js": "^2.4.0" 424 | } 425 | }, 426 | "create-hmac": { 427 | "version": "1.1.7", 428 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 429 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 430 | "dev": true, 431 | "requires": { 432 | "cipher-base": "^1.0.3", 433 | "create-hash": "^1.1.0", 434 | "inherits": "^2.0.1", 435 | "ripemd160": "^2.0.0", 436 | "safe-buffer": "^5.0.1", 437 | "sha.js": "^2.4.8" 438 | } 439 | }, 440 | "cryptiles": { 441 | "version": "2.0.5", 442 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 443 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 444 | "dev": true, 445 | "requires": { 446 | "boom": "2.x.x" 447 | } 448 | }, 449 | "dashdash": { 450 | "version": "1.14.1", 451 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 452 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 453 | "dev": true, 454 | "requires": { 455 | "assert-plus": "^1.0.0" 456 | }, 457 | "dependencies": { 458 | "assert-plus": { 459 | "version": "1.0.0", 460 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 461 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 462 | "dev": true 463 | } 464 | } 465 | }, 466 | "debug": { 467 | "version": "3.1.0", 468 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 469 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 470 | "dev": true, 471 | "requires": { 472 | "ms": "2.0.0" 473 | } 474 | }, 475 | "delayed-stream": { 476 | "version": "1.0.0", 477 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 478 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 479 | "dev": true 480 | }, 481 | "diff": { 482 | "version": "3.5.0", 483 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 484 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 485 | "dev": true 486 | }, 487 | "ecc-jsbn": { 488 | "version": "0.1.2", 489 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 490 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 491 | "dev": true, 492 | "requires": { 493 | "jsbn": "~0.1.0", 494 | "safer-buffer": "^2.1.0" 495 | } 496 | }, 497 | "elliptic": { 498 | "version": "6.5.2", 499 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", 500 | "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", 501 | "dev": true, 502 | "requires": { 503 | "bn.js": "^4.4.0", 504 | "brorand": "^1.0.1", 505 | "hash.js": "^1.0.0", 506 | "hmac-drbg": "^1.0.0", 507 | "inherits": "^2.0.1", 508 | "minimalistic-assert": "^1.0.0", 509 | "minimalistic-crypto-utils": "^1.0.0" 510 | } 511 | }, 512 | "err-code": { 513 | "version": "1.1.2", 514 | "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", 515 | "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", 516 | "dev": true 517 | }, 518 | "escape-string-regexp": { 519 | "version": "1.0.5", 520 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 521 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 522 | "dev": true 523 | }, 524 | "extend": { 525 | "version": "3.0.2", 526 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 527 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 528 | "dev": true 529 | }, 530 | "extsprintf": { 531 | "version": "1.3.0", 532 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 533 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 534 | "dev": true 535 | }, 536 | "eztz.js": { 537 | "version": "git+https://github.com/TezTech/eztz.git#cfdc4fcfc891f4f4f077c3056f414476dde3610b", 538 | "from": "git+https://github.com/TezTech/eztz.git", 539 | "dev": true, 540 | "requires": { 541 | "bignumber.js": "^7.2.1", 542 | "bip39": "^2.5.0", 543 | "bs58check": "^2.1.1", 544 | "buffer": "^5.1.0", 545 | "codecov": "^2.3.1", 546 | "libsodium-wrappers": "^0.5.4", 547 | "pbkdf2": "^3.0.14", 548 | "xhr2": "^0.1.4", 549 | "xmlhttprequest": "^1.8.0" 550 | } 551 | }, 552 | "forever-agent": { 553 | "version": "0.6.1", 554 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 555 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 556 | "dev": true 557 | }, 558 | "form-data": { 559 | "version": "2.1.4", 560 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 561 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 562 | "dev": true, 563 | "requires": { 564 | "asynckit": "^0.4.0", 565 | "combined-stream": "^1.0.5", 566 | "mime-types": "^2.1.12" 567 | } 568 | }, 569 | "fs.realpath": { 570 | "version": "1.0.0", 571 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 572 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 573 | "dev": true 574 | }, 575 | "generate-function": { 576 | "version": "2.3.1", 577 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", 578 | "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", 579 | "dev": true, 580 | "requires": { 581 | "is-property": "^1.0.2" 582 | } 583 | }, 584 | "generate-object-property": { 585 | "version": "1.2.0", 586 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", 587 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", 588 | "dev": true, 589 | "requires": { 590 | "is-property": "^1.0.0" 591 | } 592 | }, 593 | "getpass": { 594 | "version": "0.1.7", 595 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 596 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 597 | "dev": true, 598 | "requires": { 599 | "assert-plus": "^1.0.0" 600 | }, 601 | "dependencies": { 602 | "assert-plus": { 603 | "version": "1.0.0", 604 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 605 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 606 | "dev": true 607 | } 608 | } 609 | }, 610 | "glob": { 611 | "version": "7.1.2", 612 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 613 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 614 | "dev": true, 615 | "requires": { 616 | "fs.realpath": "^1.0.0", 617 | "inflight": "^1.0.4", 618 | "inherits": "2", 619 | "minimatch": "^3.0.4", 620 | "once": "^1.3.0", 621 | "path-is-absolute": "^1.0.0" 622 | } 623 | }, 624 | "growl": { 625 | "version": "1.10.5", 626 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 627 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 628 | "dev": true 629 | }, 630 | "har-validator": { 631 | "version": "2.0.6", 632 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", 633 | "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", 634 | "dev": true, 635 | "requires": { 636 | "chalk": "^1.1.1", 637 | "commander": "^2.9.0", 638 | "is-my-json-valid": "^2.12.4", 639 | "pinkie-promise": "^2.0.0" 640 | } 641 | }, 642 | "has-ansi": { 643 | "version": "2.0.0", 644 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 645 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 646 | "dev": true, 647 | "requires": { 648 | "ansi-regex": "^2.0.0" 649 | } 650 | }, 651 | "has-flag": { 652 | "version": "3.0.0", 653 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 654 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 655 | "dev": true 656 | }, 657 | "hash-base": { 658 | "version": "3.0.4", 659 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 660 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 661 | "dev": true, 662 | "requires": { 663 | "inherits": "^2.0.1", 664 | "safe-buffer": "^5.0.1" 665 | } 666 | }, 667 | "hash.js": { 668 | "version": "1.1.7", 669 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 670 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 671 | "dev": true, 672 | "requires": { 673 | "inherits": "^2.0.3", 674 | "minimalistic-assert": "^1.0.1" 675 | } 676 | }, 677 | "hawk": { 678 | "version": "3.1.3", 679 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 680 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 681 | "dev": true, 682 | "requires": { 683 | "boom": "2.x.x", 684 | "cryptiles": "2.x.x", 685 | "hoek": "2.x.x", 686 | "sntp": "1.x.x" 687 | } 688 | }, 689 | "he": { 690 | "version": "1.1.1", 691 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 692 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 693 | "dev": true 694 | }, 695 | "hmac-drbg": { 696 | "version": "1.0.1", 697 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 698 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 699 | "dev": true, 700 | "requires": { 701 | "hash.js": "^1.0.3", 702 | "minimalistic-assert": "^1.0.0", 703 | "minimalistic-crypto-utils": "^1.0.1" 704 | } 705 | }, 706 | "hoek": { 707 | "version": "2.16.3", 708 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 709 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", 710 | "dev": true 711 | }, 712 | "http-signature": { 713 | "version": "1.1.1", 714 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 715 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 716 | "dev": true, 717 | "requires": { 718 | "assert-plus": "^0.2.0", 719 | "jsprim": "^1.2.2", 720 | "sshpk": "^1.7.0" 721 | } 722 | }, 723 | "ieee754": { 724 | "version": "1.1.13", 725 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 726 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", 727 | "dev": true 728 | }, 729 | "inflight": { 730 | "version": "1.0.6", 731 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 732 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 733 | "dev": true, 734 | "requires": { 735 | "once": "^1.3.0", 736 | "wrappy": "1" 737 | } 738 | }, 739 | "inherits": { 740 | "version": "2.0.4", 741 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 742 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 743 | "dev": true 744 | }, 745 | "is-my-ip-valid": { 746 | "version": "1.0.0", 747 | "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", 748 | "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", 749 | "dev": true 750 | }, 751 | "is-my-json-valid": { 752 | "version": "2.20.0", 753 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", 754 | "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", 755 | "dev": true, 756 | "requires": { 757 | "generate-function": "^2.0.0", 758 | "generate-object-property": "^1.1.0", 759 | "is-my-ip-valid": "^1.0.0", 760 | "jsonpointer": "^4.0.0", 761 | "xtend": "^4.0.0" 762 | } 763 | }, 764 | "is-property": { 765 | "version": "1.0.2", 766 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 767 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", 768 | "dev": true 769 | }, 770 | "is-typedarray": { 771 | "version": "1.0.0", 772 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 773 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 774 | "dev": true 775 | }, 776 | "isstream": { 777 | "version": "0.1.2", 778 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 779 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 780 | "dev": true 781 | }, 782 | "jsbn": { 783 | "version": "0.1.1", 784 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 785 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 786 | "dev": true 787 | }, 788 | "json-schema": { 789 | "version": "0.2.3", 790 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 791 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 792 | "dev": true 793 | }, 794 | "json-stringify-safe": { 795 | "version": "5.0.1", 796 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 797 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 798 | "dev": true 799 | }, 800 | "jsonpointer": { 801 | "version": "4.0.1", 802 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", 803 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", 804 | "dev": true 805 | }, 806 | "jsprim": { 807 | "version": "1.4.1", 808 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 809 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 810 | "dev": true, 811 | "requires": { 812 | "assert-plus": "1.0.0", 813 | "extsprintf": "1.3.0", 814 | "json-schema": "0.2.3", 815 | "verror": "1.10.0" 816 | }, 817 | "dependencies": { 818 | "assert-plus": { 819 | "version": "1.0.0", 820 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 821 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 822 | "dev": true 823 | } 824 | } 825 | }, 826 | "libsodium": { 827 | "version": "0.5.4", 828 | "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.5.4.tgz", 829 | "integrity": "sha512-s1TQ2V23JvGby1gnCQEQncTNTGck/rtJPPA8c0TiBo9z9TpT4eUk5zThte8H1TkdoKQznneqZqyoqdrwu2btWw==", 830 | "dev": true 831 | }, 832 | "libsodium-wrappers": { 833 | "version": "0.5.4", 834 | "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.5.4.tgz", 835 | "integrity": "sha512-dAYsfQgh6XwR4I65y7T5qDgb2XNKDpzXEXz229sDplaJfnAuIBTHBYlQ44jL5DIS4cCUspE3+g0kF4/Xe8286A==", 836 | "dev": true, 837 | "requires": { 838 | "libsodium": "0.5.4" 839 | } 840 | }, 841 | "lodash": { 842 | "version": "4.17.15", 843 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 844 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 845 | "dev": true 846 | }, 847 | "md5.js": { 848 | "version": "1.3.5", 849 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 850 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 851 | "dev": true, 852 | "requires": { 853 | "hash-base": "^3.0.0", 854 | "inherits": "^2.0.1", 855 | "safe-buffer": "^5.1.2" 856 | } 857 | }, 858 | "mime-db": { 859 | "version": "1.43.0", 860 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", 861 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", 862 | "dev": true 863 | }, 864 | "mime-types": { 865 | "version": "2.1.26", 866 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", 867 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", 868 | "dev": true, 869 | "requires": { 870 | "mime-db": "1.43.0" 871 | } 872 | }, 873 | "minimalistic-assert": { 874 | "version": "1.0.1", 875 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 876 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 877 | "dev": true 878 | }, 879 | "minimalistic-crypto-utils": { 880 | "version": "1.0.1", 881 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 882 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 883 | "dev": true 884 | }, 885 | "minimatch": { 886 | "version": "3.0.4", 887 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 888 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 889 | "dev": true, 890 | "requires": { 891 | "brace-expansion": "^1.1.7" 892 | } 893 | }, 894 | "minimist": { 895 | "version": "0.0.8", 896 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 897 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 898 | "dev": true 899 | }, 900 | "mkdirp": { 901 | "version": "0.5.1", 902 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 903 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 904 | "dev": true, 905 | "requires": { 906 | "minimist": "0.0.8" 907 | } 908 | }, 909 | "mocha": { 910 | "version": "5.2.0", 911 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", 912 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", 913 | "dev": true, 914 | "requires": { 915 | "browser-stdout": "1.3.1", 916 | "commander": "2.15.1", 917 | "debug": "3.1.0", 918 | "diff": "3.5.0", 919 | "escape-string-regexp": "1.0.5", 920 | "glob": "7.1.2", 921 | "growl": "1.10.5", 922 | "he": "1.1.1", 923 | "minimatch": "3.0.4", 924 | "mkdirp": "0.5.1", 925 | "supports-color": "5.4.0" 926 | }, 927 | "dependencies": { 928 | "commander": { 929 | "version": "2.15.1", 930 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 931 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", 932 | "dev": true 933 | }, 934 | "supports-color": { 935 | "version": "5.4.0", 936 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 937 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 938 | "dev": true, 939 | "requires": { 940 | "has-flag": "^3.0.0" 941 | } 942 | } 943 | } 944 | }, 945 | "ms": { 946 | "version": "2.0.0", 947 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 948 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 949 | "dev": true 950 | }, 951 | "node-uuid": { 952 | "version": "1.4.8", 953 | "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", 954 | "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", 955 | "dev": true 956 | }, 957 | "oauth-sign": { 958 | "version": "0.8.2", 959 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 960 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 961 | "dev": true 962 | }, 963 | "once": { 964 | "version": "1.4.0", 965 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 966 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 967 | "dev": true, 968 | "requires": { 969 | "wrappy": "1" 970 | } 971 | }, 972 | "original-require": { 973 | "version": "1.0.1", 974 | "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", 975 | "integrity": "sha1-DxMEcVhM0zURxew4yNWSE/msXiA=", 976 | "dev": true 977 | }, 978 | "path-is-absolute": { 979 | "version": "1.0.1", 980 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 981 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 982 | "dev": true 983 | }, 984 | "pbkdf2": { 985 | "version": "3.0.17", 986 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 987 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 988 | "dev": true, 989 | "requires": { 990 | "create-hash": "^1.1.2", 991 | "create-hmac": "^1.1.4", 992 | "ripemd160": "^2.0.1", 993 | "safe-buffer": "^5.0.1", 994 | "sha.js": "^2.4.8" 995 | } 996 | }, 997 | "pinkie": { 998 | "version": "2.0.4", 999 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1000 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1001 | "dev": true 1002 | }, 1003 | "pinkie-promise": { 1004 | "version": "2.0.1", 1005 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1006 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1007 | "dev": true, 1008 | "requires": { 1009 | "pinkie": "^2.0.0" 1010 | } 1011 | }, 1012 | "promise-retry": { 1013 | "version": "1.1.1", 1014 | "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", 1015 | "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", 1016 | "dev": true, 1017 | "requires": { 1018 | "err-code": "^1.0.0", 1019 | "retry": "^0.10.0" 1020 | } 1021 | }, 1022 | "punycode": { 1023 | "version": "1.4.1", 1024 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1025 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1026 | "dev": true 1027 | }, 1028 | "qs": { 1029 | "version": "6.3.2", 1030 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", 1031 | "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", 1032 | "dev": true 1033 | }, 1034 | "randombytes": { 1035 | "version": "2.1.0", 1036 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1037 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1038 | "dev": true, 1039 | "requires": { 1040 | "safe-buffer": "^5.1.0" 1041 | } 1042 | }, 1043 | "request": { 1044 | "version": "2.77.0", 1045 | "resolved": "https://registry.npmjs.org/request/-/request-2.77.0.tgz", 1046 | "integrity": "sha1-KwDYIDDt7cyXCJ/6XYgQqcKqMUs=", 1047 | "dev": true, 1048 | "requires": { 1049 | "aws-sign2": "~0.6.0", 1050 | "aws4": "^1.2.1", 1051 | "caseless": "~0.11.0", 1052 | "combined-stream": "~1.0.5", 1053 | "extend": "~3.0.0", 1054 | "forever-agent": "~0.6.1", 1055 | "form-data": "~2.1.1", 1056 | "har-validator": "~2.0.6", 1057 | "hawk": "~3.1.3", 1058 | "http-signature": "~1.1.0", 1059 | "is-typedarray": "~1.0.0", 1060 | "isstream": "~0.1.2", 1061 | "json-stringify-safe": "~5.0.1", 1062 | "mime-types": "~2.1.7", 1063 | "node-uuid": "~1.4.7", 1064 | "oauth-sign": "~0.8.1", 1065 | "qs": "~6.3.0", 1066 | "stringstream": "~0.0.4", 1067 | "tough-cookie": "~2.3.0", 1068 | "tunnel-agent": "~0.4.1" 1069 | } 1070 | }, 1071 | "retry": { 1072 | "version": "0.10.1", 1073 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", 1074 | "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", 1075 | "dev": true 1076 | }, 1077 | "ripemd160": { 1078 | "version": "2.0.2", 1079 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 1080 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 1081 | "dev": true, 1082 | "requires": { 1083 | "hash-base": "^3.0.0", 1084 | "inherits": "^2.0.1" 1085 | } 1086 | }, 1087 | "rxjs": { 1088 | "version": "6.5.4", 1089 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", 1090 | "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", 1091 | "dev": true, 1092 | "requires": { 1093 | "tslib": "^1.9.0" 1094 | } 1095 | }, 1096 | "safe-buffer": { 1097 | "version": "5.2.0", 1098 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1099 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 1100 | "dev": true 1101 | }, 1102 | "safer-buffer": { 1103 | "version": "2.1.2", 1104 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1105 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1106 | "dev": true 1107 | }, 1108 | "sha.js": { 1109 | "version": "2.4.11", 1110 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1111 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1112 | "dev": true, 1113 | "requires": { 1114 | "inherits": "^2.0.1", 1115 | "safe-buffer": "^5.0.1" 1116 | } 1117 | }, 1118 | "sntp": { 1119 | "version": "1.0.9", 1120 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 1121 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 1122 | "dev": true, 1123 | "requires": { 1124 | "hoek": "2.x.x" 1125 | } 1126 | }, 1127 | "sshpk": { 1128 | "version": "1.16.1", 1129 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1130 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1131 | "dev": true, 1132 | "requires": { 1133 | "asn1": "~0.2.3", 1134 | "assert-plus": "^1.0.0", 1135 | "bcrypt-pbkdf": "^1.0.0", 1136 | "dashdash": "^1.12.0", 1137 | "ecc-jsbn": "~0.1.1", 1138 | "getpass": "^0.1.1", 1139 | "jsbn": "~0.1.0", 1140 | "safer-buffer": "^2.0.2", 1141 | "tweetnacl": "~0.14.0" 1142 | }, 1143 | "dependencies": { 1144 | "assert-plus": { 1145 | "version": "1.0.0", 1146 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1147 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1148 | "dev": true 1149 | } 1150 | } 1151 | }, 1152 | "stringstream": { 1153 | "version": "0.0.6", 1154 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", 1155 | "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", 1156 | "dev": true 1157 | }, 1158 | "strip-ansi": { 1159 | "version": "3.0.1", 1160 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1161 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1162 | "dev": true, 1163 | "requires": { 1164 | "ansi-regex": "^2.0.0" 1165 | } 1166 | }, 1167 | "supports-color": { 1168 | "version": "2.0.0", 1169 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1170 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1171 | "dev": true 1172 | }, 1173 | "tough-cookie": { 1174 | "version": "2.3.4", 1175 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 1176 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 1177 | "dev": true, 1178 | "requires": { 1179 | "punycode": "^1.4.1" 1180 | } 1181 | }, 1182 | "truffle": { 1183 | "version": "5.2.0-tezos.1", 1184 | "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.2.0-tezos.1.tgz", 1185 | "integrity": "sha512-AMez02G/nCM9vQc3bTJtT44aEKwxG16jvbVsHXpJl+/Ygp6qzv+d2HV2ggzmPgJzFJhjP03/hnSFcGdmTxNCQA==", 1186 | "dev": true, 1187 | "requires": { 1188 | "app-module-path": "^2.2.0", 1189 | "mocha": "5.2.0", 1190 | "original-require": "1.0.1" 1191 | } 1192 | }, 1193 | "tslib": { 1194 | "version": "1.11.1", 1195 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", 1196 | "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", 1197 | "dev": true 1198 | }, 1199 | "tunnel-agent": { 1200 | "version": "0.4.3", 1201 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", 1202 | "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", 1203 | "dev": true 1204 | }, 1205 | "tweetnacl": { 1206 | "version": "0.14.5", 1207 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1208 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1209 | "dev": true 1210 | }, 1211 | "typedarray-to-buffer": { 1212 | "version": "3.1.5", 1213 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 1214 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 1215 | "dev": true, 1216 | "requires": { 1217 | "is-typedarray": "^1.0.0" 1218 | } 1219 | }, 1220 | "unorm": { 1221 | "version": "1.6.0", 1222 | "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", 1223 | "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", 1224 | "dev": true 1225 | }, 1226 | "urlgrey": { 1227 | "version": "0.4.4", 1228 | "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", 1229 | "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", 1230 | "dev": true 1231 | }, 1232 | "verror": { 1233 | "version": "1.10.0", 1234 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1235 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1236 | "dev": true, 1237 | "requires": { 1238 | "assert-plus": "^1.0.0", 1239 | "core-util-is": "1.0.2", 1240 | "extsprintf": "^1.2.0" 1241 | }, 1242 | "dependencies": { 1243 | "assert-plus": { 1244 | "version": "1.0.0", 1245 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1246 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1247 | "dev": true 1248 | } 1249 | } 1250 | }, 1251 | "wrappy": { 1252 | "version": "1.0.2", 1253 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1254 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1255 | "dev": true 1256 | }, 1257 | "xhr2": { 1258 | "version": "0.1.4", 1259 | "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", 1260 | "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=", 1261 | "dev": true 1262 | }, 1263 | "xhr2-cookies": { 1264 | "version": "1.1.0", 1265 | "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", 1266 | "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", 1267 | "dev": true, 1268 | "requires": { 1269 | "cookiejar": "^2.1.1" 1270 | } 1271 | }, 1272 | "xmlhttprequest": { 1273 | "version": "1.8.0", 1274 | "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 1275 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", 1276 | "dev": true 1277 | }, 1278 | "xtend": { 1279 | "version": "4.0.2", 1280 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1281 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1282 | "dev": true 1283 | } 1284 | } 1285 | } 1286 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tezos-starter-kit", 3 | "version": "1.0.0", 4 | "description": "", 5 | "dependencies": {}, 6 | "devDependencies": { 7 | "eztz.js": "git+https://github.com/TezTech/eztz.git", 8 | "promise-retry": "^1.1.1", 9 | "truffle": "^5.2.0-tezos.1", 10 | "@taquito/taquito": "^6.0.3-beta.0", 11 | "lodash": "^4.17.15" 12 | }, 13 | "scripts": { 14 | "test": "truffle test", 15 | "compile": "truffle compile", 16 | "migrate": "truffle migrate", 17 | "clean": "rm -rf ./build", 18 | "wait-for-sandbox": "node ./scripts/sandbox/waitForNetwork.js", 19 | "start-sandbox": "./scripts/sandbox/start_sandbox.sh", 20 | "kill-sandbox": "./scripts/sandbox/kill_sandbox.sh", 21 | "restart-sandbox": "./scripts/sandbox/restart_sandbox.sh" 22 | }, 23 | "author": "matej.sima@stove-labs.com", 24 | "license": "MIT" 25 | } 26 | -------------------------------------------------------------------------------- /scripts/sandbox/accounts.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | alice: { 3 | pkh: "tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb", 4 | sk: "edsk3QoqBuvdamxouPhin7swCvkQNgq4jP5KZPbwWNnwdZpSpJiEbq", 5 | pk: "edpkvGfYw3LyB1UcCahKQk4rF2tvbMUk8GFiTuMjL75uGXrpvKXhjn" 6 | }, 7 | bob: { 8 | pkh: "tz1aSkwEot3L2kmUvcoxzjMomb9mvBNuzFK6", 9 | sk: "edsk3RFfvaFaxbHx8BMtEW1rKQcPtDML3LXjNqMNLCzC3wLC1bWbAt", 10 | pk: "edpkurPsQ8eUApnLUJ9ZPDvu98E8VNj4KtJa1aZr16Cr5ow5VHKnz4" 11 | } 12 | }; -------------------------------------------------------------------------------- /scripts/sandbox/docker/babylon/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.gitlab.com/tezos/flextesa:image-babylonbox-run 2 | ADD ./mini_babylon_archive.sh /usr/bin/sandbox-archive 3 | RUN chmod a+rx /usr/bin/sandbox-archive -------------------------------------------------------------------------------- /scripts/sandbox/docker/babylon/build_sandbox_archive.sh: -------------------------------------------------------------------------------- 1 | docker build -t stovelabs/image-babylonbox-run-archive -f ./scripts/sandbox/docker/babylon/Dockerfile ./scripts/sandbox/docker/babylon -------------------------------------------------------------------------------- /scripts/sandbox/docker/babylon/mini_babylon_archive.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | all_commands=" 4 | * usage | help | --help | -h: Display this help message." 5 | usage () { 6 | cat >&2 < 12 | 13 | where may be: 14 | $all_commands 15 | EOF 16 | } 17 | 18 | export alice="$(flextesa key alice)" 19 | export bob="$(flextesa key bob)" 20 | 21 | export flextesa_node_cors_origin="*" 22 | 23 | all_commands="$all_commands 24 | * start : Start the sandbox." 25 | start () { 26 | flextesa mini-net \ 27 | --root /tmp/mini-babylon --size 1 "$@" \ 28 | --number-of-b 1 \ 29 | --time-b 10 \ 30 | --add-bootstrap-account="$alice@2_000_000_000_000" \ 31 | --add-bootstrap-account="$bob@2_000_000_000_000" \ 32 | --no-daemons-for=alice \ 33 | --no-daemons-for=bob \ 34 | --until-level 2_000_000 \ 35 | --tezos-baker tezos-baker-005-PsBabyM1 \ 36 | --tezos-endor tezos-endorser-005-PsBabyM1 \ 37 | --tezos-accus tezos-accuser-005-PsBabyM1 \ 38 | --protocol-hash PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS \ 39 | --set-history-mode N000:archive 40 | } 41 | 42 | all_commands="$all_commands 43 | * info : Show accounts and information about the sandbox." 44 | info () { 45 | cat >&2 <&2 < 12 | 13 | where may be: 14 | $all_commands 15 | EOF 16 | } 17 | 18 | export alice="$(flextesa key alice)" 19 | export bob="$(flextesa key bob)" 20 | 21 | export flextesa_node_cors_origin="*" 22 | 23 | all_commands="$all_commands 24 | * start : Start the sandbox." 25 | start () { 26 | flextesa mini-net \ 27 | --root /tmp/mini-babylon --size 1 "$@" \ 28 | --number-of-b 1 \ 29 | --time-b 10 \ 30 | --add-bootstrap-account="$alice@2_000_000_000_000" \ 31 | --add-bootstrap-account="$bob@2_000_000_000_000" \ 32 | --no-daemons-for=alice \ 33 | --no-daemons-for=bob \ 34 | --until-level 2_000_000 \ 35 | --tezos-baker tezos-baker-006-PsCARTHA \ 36 | --tezos-endor tezos-endorser-006-PsCARTHA \ 37 | --tezos-accus tezos-accuser-006-PsCARTHA \ 38 | --protocol-hash PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb \ 39 | --protocol-kind Carthage \ 40 | --set-history-mode N000:archive 41 | } 42 | 43 | all_commands="$all_commands 44 | * info : Show accounts and information about the sandbox." 45 | info () { 46 | cat >&2 < { 14 | console.log('Waiting for the sandbox network to be ready'); 15 | promiseRetry((retry, number) => { 16 | return Tezos.rpc.getBlockHeader({ 17 | block: 1 18 | }) 19 | .then(() => console.log('Sandbox network ready!')) 20 | .catch(retry); 21 | }, { retries: 8 }); 22 | })() -------------------------------------------------------------------------------- /test/tzip_12_tutorial.js: -------------------------------------------------------------------------------- 1 | const tzip_12_tutorial = artifacts.require('tzip_12_tutorial'); 2 | const balance_requester = artifacts.require('balance_requester'); 3 | 4 | const { initial_storage } = require('../migrations/1_deploy_tzip_12_tutorial.js'); 5 | const bigMapKeyNotFound = require('./../helpers/bigMapKeyNotFound.js'); 6 | const constants = require('./../helpers/constants.js'); 7 | /** 8 | * For testing on a babylonnet (testnet), instead of the sandbox network, 9 | * make sure to replace the keys for alice/bob accordingly. 10 | */ 11 | const { alice, bob } = require('./../scripts/sandbox/accounts'); 12 | 13 | contract('tzip_12_tutorial', accounts => { 14 | let storage; 15 | let tzip_12_tutorial_instance; 16 | let balance_requester_instance; 17 | 18 | before(async () => { 19 | tzip_12_tutorial_instance = await tzip_12_tutorial.deployed(); 20 | balance_requester_instance = await balance_requester.deployed(); 21 | /** 22 | * Display the current contract address for debugging purposes 23 | */ 24 | console.log('Token contract deployed at:', tzip_12_tutorial_instance.address); 25 | console.log('Balance requester contract deployed at:', balance_requester_instance.address); 26 | 27 | storage = await tzip_12_tutorial_instance.storage(); 28 | }); 29 | 30 | const expectedBalanceAlice = initial_storage[alice.pkh]; 31 | it(`should store a balance of ${expectedBalanceAlice} for Alice`, async () => { 32 | /** 33 | * Get balance for Alice from the smart contract's storage (by a big map key) 34 | */ 35 | const deployedBalanceAlice = await storage.get(alice.pkh); 36 | assert.equal(expectedBalanceAlice, deployedBalanceAlice); 37 | }); 38 | 39 | it(`should not store any balance for Bob`, async () => { 40 | let fetchBalanceError; 41 | 42 | try { 43 | /** 44 | * If a big map key does not exist in the storage, the RPC returns a 404 HttpResponseError 45 | */ 46 | await storage.get(bob.pkh); 47 | } catch (e) { 48 | fetchBalanceError = e; 49 | } 50 | 51 | assert(bigMapKeyNotFound(fetchBalanceError)) 52 | }); 53 | 54 | it('should transfer 1 token from Alice to Bob', async () => { 55 | const transferParam = [ 56 | { 57 | /** 58 | * token_id: 0 represents the single token_id within our contract 59 | */ 60 | token_id: 0, 61 | amount: 1, 62 | from_: alice.pkh, 63 | to_: bob.pkh 64 | } 65 | ]; 66 | 67 | /** 68 | * Call the `transfer` entrypoint 69 | */ 70 | await tzip_12_tutorial_instance.transfer(transferParam); 71 | /** 72 | * Bob's token balance should now be 1 73 | */ 74 | const deployedBalanceBob = await storage.get(bob.pkh); 75 | const expectedBalanceBob = 1; 76 | assert.equal(deployedBalanceBob, expectedBalanceBob); 77 | }); 78 | 79 | it(`should not allow transfers from_ an address that did not sign the transaction`, async () => { 80 | const transferParam = [ 81 | { 82 | token_id: 0, 83 | amount: 1, 84 | from_: bob.pkh, 85 | to_: alice.pkh 86 | } 87 | ]; 88 | 89 | try { 90 | /** 91 | * Transactions in the test suite are signed by a secret/private key 92 | * configured in truffle-config.js 93 | */ 94 | await tzip_12_tutorial_instance.transfer(transferParam); 95 | } catch (e) { 96 | assert.equal(e.message, constants.contractErrors.fromEqualToSenderAddress) 97 | } 98 | }); 99 | 100 | it(`should not transfer tokens from Alice to Bob when Alice's balance is insufficient`, async () => { 101 | const transferParam = [ 102 | { 103 | token_id: 0, 104 | // Alice's balance at this point is 9 105 | amount: 100, 106 | from_: alice.pkh, 107 | to_: bob.pkh 108 | } 109 | ]; 110 | 111 | try { 112 | await tzip_12_tutorial_instance.transfer(transferParam); 113 | } catch (e) { 114 | assert.equal(e.message, constants.contractErrors.insufficientBalance) 115 | } 116 | }); 117 | 118 | it('should return the balance of alice trough the balance_of interface', async () => { 119 | const balanceRequests = [ 120 | { 121 | owner: alice.pkh, 122 | token_id: 0 123 | } 124 | ]; 125 | const at = tzip_12_tutorial_instance.address; 126 | 127 | await balance_requester_instance.request_balance( 128 | at, 129 | balanceRequests 130 | ); 131 | 132 | const balance_requesterStorage = await balance_requester_instance.storage(); 133 | const deployedBalanceAlice = await storage.get(alice.pkh); 134 | const balanceResponse = balance_requesterStorage[0]; 135 | assert(balanceResponse.balance.isEqualTo(deployedBalanceAlice)); 136 | }); 137 | 138 | }); 139 | -------------------------------------------------------------------------------- /truffle-box.json: -------------------------------------------------------------------------------- 1 | { 2 | "ignore": [ 3 | "README.md", 4 | "test/.gitkeep" 5 | ], 6 | "commands": { 7 | "Compile": "npm run compile", 8 | "Migrate": "npm run migrate", 9 | "Test contracts": "npm run test" 10 | } 11 | } -------------------------------------------------------------------------------- /truffle-config.js: -------------------------------------------------------------------------------- 1 | const { mnemonic, secret, password, email } = require("./faucet.json"); 2 | const { alice } = require('./scripts/sandbox/accounts'); 3 | module.exports = { 4 | // see 5 | // for more details on how to specify configuration options! 6 | contracts_directory: "./contracts/main", 7 | networks: { 8 | development: { 9 | host: "http://localhost", 10 | port: 8732, 11 | network_id: "*", 12 | secretKey: alice.sk, 13 | type: "tezos" 14 | }, 15 | babylonnet: { 16 | host: "https://babylonnet.tezos.org.ua", 17 | network_id: "*", 18 | secret, 19 | mnemonic, 20 | password, 21 | email, 22 | type: "tezos" 23 | }, 24 | carthagenet: { 25 | host: "https://carthagenet.tezos.org.ua", 26 | network_id: "*", 27 | secret, 28 | mnemonic, 29 | password, 30 | email, 31 | type: "tezos" 32 | } 33 | } 34 | }; 35 | --------------------------------------------------------------------------------