├── .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 |
--------------------------------------------------------------------------------