├── .gitignore ├── LICENSE ├── OLDREADME.md ├── README.md ├── echo_server ├── README.md ├── broadcast_logs_job.json ├── contracts │ ├── EthLog.sol │ ├── Migrations.sol │ └── RunLog.sol ├── create_ethlog_job ├── create_runlog_job ├── echo.js ├── migrations │ ├── 1_initial_migration.js │ ├── 2_eth_log.js │ ├── 3_chainlink_oracle.js │ └── 4_run_log.js ├── only_jobid_logs_job.json ├── package.json ├── screenshot.jpg ├── send_ethlog_transaction.js ├── send_runlog_transaction.js ├── truffle.js └── yarn.lock ├── twilio_sms ├── HitMeOnMyBeeper.jpg ├── README.md ├── contracts │ ├── GetMoney.sol │ └── Migrations.sol ├── create_twilio_job_for ├── migrations │ ├── 1_initial_migration.js │ └── 2_get_money.js ├── package.json ├── send_money_to ├── truffle.js ├── twilio.js └── yarn.lock └── uptime_sla ├── README.md ├── chainlink_deployer.js ├── contracts ├── Migrations.sol └── UptimeSLA.sol ├── create_http_json_x10000_job ├── deploy ├── get_uptime.js ├── http_json_x10000_job.json ├── migrations ├── 1_initial_migration.js ├── 2_oracle.js └── 3_uptime_sla.js ├── package.json ├── send_sla_transaction.js ├── test ├── UptimeSLA_test.js └── support │ └── helpers.js ├── truffle.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | build/ 3 | tmp/ 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 SmartContract ChainLink, Ltd. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /OLDREADME.md: -------------------------------------------------------------------------------- 1 | ## Hello Chainlink 2 | 3 | This is a repository of introductory [Chainlink](https://github.com/smartcontractkit/chainlink) integrations. 4 | Please click on each folder for more information. 5 | 6 | ## Requirements 7 | 8 | - Go 1.9+ 9 | - Node JS 10 | - Docker 11 | 12 | ## Run Chainlink Development Environment 13 | 14 | Each example requires the development environment, set up as follows: 15 | 16 | 1. Check out repo [smartcontractkit/chainlink](https://github.com/smartcontractkit/chainlink) and navigate to folder. 17 | 2. Run `./internal/bin/devnet` (or configure direnv `.envrc` to add `internal/bin` to your `PATH`) 18 | 3. Run truffle migrations: 19 | 1. `cd solidity` 20 | 2. `yarn install` 21 | 3. `./node_modules/.bin/truffle migrate --network devnet` 22 | 4. Run `./internal/bin/cldev` in top level repo folder 23 | 24 | Go to our [development wiki](https://github.com/smartcontractkit/chainlink/wiki/Development-Tips) to read more. 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Hello Chainlink 2 | 3 | Our examples have been moved to the main [Chainlink](https://github.com/smartcontractkit/chainlink/tree/master/examples) repository. 4 | 5 | The old README for this repository can be viewed [here](OLDREADME.md). -------------------------------------------------------------------------------- /echo_server/README.md: -------------------------------------------------------------------------------- 1 | # Echo Server 2 | 3 | Using Chainlink (CL), this application simply echos incoming ethereum logs 4 | as JSON, listened to by a CL job. It is intended to demonstrate the the first 5 | step to bridging on chain to off chain activity. 6 | 7 | ![Log Echo Server](screenshot.jpg?raw=true "Log Echo Server") 8 | 9 | ## Configure and run [Chainlink development environment](../README.md) 10 | 11 | ## Run Echo Server EthLog (Raw Ethereum Logs) 12 | 13 | Uses an `ethlog` initiator to echo all log events. An `ethlog` initiator starts 14 | a job anytime a log event occurs. It can optionally be filtered by an `address`. 15 | 16 | 1. Check out this repo and go to folder [hello_chainlink/echo_server](https://github.com/smartcontractkit/hello_chainlink/tree/master/echo_server). 17 | 2. `./create_ethlog_job` to create the Chainlink (CL) job 18 | 3. `yarn install` 19 | 4. `node echo.js` 20 | 5. `./node_modules/.bin/truffle migrate` in another window 21 | 6. `node send_ethlog_transaction.js` 22 | 7. Wait for log to show up in echo server 23 | 24 | ## Run Echo Server RunLog (Chainlink Specific Ethereum Logs) 25 | 26 | Uses a `runlog` initiator to echo Chainlink log events with the matching job id. 27 | 28 | 1. Check out this repo and go to folder [hello_chainlink/echo_server](https://github.com/smartcontractkit/hello_chainlink/tree/master/echo_server). 29 | 2. `./create_runlog_job` to create CL job. Keep track of the returned job id. 30 | 3. `yarn install` 31 | 4. `node echo.js` 32 | 5. Add job id to `contracts/RunLog.sol` where it says `MY_JOB_ID` 33 | 5. `./node_modules/.bin/truffle migrate --reset` in another window 34 | 6. `node send_runlog_transaction.js` 35 | 7. Wait for log to show up in echo server 36 | 37 | 38 | ## Further Reading 39 | 40 | Please see the other examples in the repo, and take care to 41 | identify the difference between an `HttpPost` task and a bridge to an external 42 | adapter. The latter allows an asynchronous response from a service to 43 | then potentially write back to the chain. 44 | -------------------------------------------------------------------------------- /echo_server/broadcast_logs_job.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "An ethlog with no address listens to all addresses.", 3 | "initiators": [{ "type": "ethlog" }], 4 | "tasks": [ 5 | { "type": "HttpPost", "url": "http://localhost:6690" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /echo_server/contracts/EthLog.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.18; 2 | 3 | contract EthLog { 4 | event LogEvent(bytes32 indexed jobId); 5 | 6 | function logEvent() public { 7 | LogEvent("hello_chainlink"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /echo_server/contracts/Migrations.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.17; 2 | 3 | contract Migrations { 4 | address public owner; 5 | uint public last_completed_migration; 6 | 7 | modifier restricted() { 8 | if (msg.sender == owner) _; 9 | } 10 | 11 | function Migrations() public { 12 | owner = msg.sender; 13 | } 14 | 15 | function setCompleted(uint completed) public restricted { 16 | last_completed_migration = completed; 17 | } 18 | 19 | function upgrade(address new_address) public restricted { 20 | Migrations upgraded = Migrations(new_address); 21 | upgraded.setCompleted(last_completed_migration); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /echo_server/contracts/RunLog.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.18; 2 | 3 | import "../node_modules/chainlink/solidity/contracts/Chainlinked.sol"; 4 | 5 | contract RunLog is Chainlinked { 6 | uint256 private requestId; 7 | 8 | function RunLog(address _oracle) public { 9 | setOracle(_oracle); 10 | } 11 | 12 | function request() public { 13 | var fid = bytes4(keccak256("fulfill(uint256,bytes32)")); 14 | var data = '{"msg":"hello_chainlink"}'; 15 | requestId = oracle.requestData("MY_JOB_ID", this, fid, data); 16 | } 17 | 18 | function fulfill(uint256 _requestId, bytes32 _data) 19 | public 20 | onlyOracle 21 | checkRequestId(_requestId) 22 | { 23 | } 24 | 25 | modifier checkRequestId(uint256 _requestId) { 26 | require(requestId == _requestId); 27 | _; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /echo_server/create_ethlog_job: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | curl -u chainlink:twochains -X POST -H 'Content-Type: application/json' \ 4 | -d @./broadcast_logs_job.json http://localhost:6688/v2/specs 5 | 6 | -------------------------------------------------------------------------------- /echo_server/create_runlog_job: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | curl -u chainlink:twochains -X POST -H 'Content-Type: application/json' \ 4 | -d @./only_jobid_logs_job.json http://localhost:6688/v2/specs 5 | -------------------------------------------------------------------------------- /echo_server/echo.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var echoes = 0; 4 | var express = require('express'); 5 | var body_parser = require('body-parser'); 6 | var app = express(); 7 | var PORT = process.argv[2]; 8 | app.use(body_parser.json()) 9 | 10 | app.get('/count', function (req, res) { 11 | res.json(echoes); 12 | }); 13 | 14 | app.all('*', function (req, res) { 15 | echoes += 1; 16 | console.log({headers: req.headers, body: req.body}); 17 | res.json({headers: req.headers, body: req.body}); 18 | }); 19 | 20 | if(isNaN(parseFloat(PORT))){ 21 | console.log("defaulting to 6690"); 22 | PORT = 6690; 23 | } 24 | 25 | app.listen(PORT, function () { 26 | console.log("listening on port " + PORT); 27 | }); 28 | -------------------------------------------------------------------------------- /echo_server/migrations/1_initial_migration.js: -------------------------------------------------------------------------------- 1 | var Migrations = artifacts.require("./Migrations.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Migrations); 5 | }; 6 | -------------------------------------------------------------------------------- /echo_server/migrations/2_eth_log.js: -------------------------------------------------------------------------------- 1 | var EthLog = artifacts.require("./EthLog.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(EthLog); 5 | }; 6 | -------------------------------------------------------------------------------- /echo_server/migrations/3_chainlink_oracle.js: -------------------------------------------------------------------------------- 1 | let Oracle = artifacts.require("../node_modules/smartcontractkit/chainlink/solidity/contracts/Oracle.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Oracle); 5 | }; 6 | -------------------------------------------------------------------------------- /echo_server/migrations/4_run_log.js: -------------------------------------------------------------------------------- 1 | let Oracle = artifacts.require("../node_modules/smartcontractkit/chainlink/solidity/contracts/Oracle.sol"); 2 | let RunLog = artifacts.require("./RunLog.sol"); 3 | 4 | module.exports = function(deployer) { 5 | deployer.deploy(RunLog, Oracle.address); 6 | }; 7 | -------------------------------------------------------------------------------- /echo_server/only_jobid_logs_job.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "A runlog has a jobid baked into the contract so chainlink knows which job to run.", 3 | "initiators": [{ "type": "runlog" }], 4 | "tasks": [ 5 | { "type": "HttpPost", "url": "http://localhost:6690" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /echo_server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "chainlink": "github:smartcontractkit/chainlink", 4 | "express": "^4.16.2", 5 | "solidity-stringutils": "github:Arachnid/solidity-stringutils", 6 | "truffle": "^4.0.6", 7 | "truffle-contract": "^3.0.3", 8 | "zeppelin-solidity": "^1.6.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /echo_server/screenshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smartcontractkit/hello_chainlink/67e8a78bfc11175b79d7266891e6c2362971c43f/echo_server/screenshot.jpg -------------------------------------------------------------------------------- /echo_server/send_ethlog_transaction.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var Web3 = require('web3'), 4 | contract = require("truffle-contract"), 5 | path = require('path') 6 | EthLogJSON = require(path.join(__dirname, 'build/contracts/EthLog.json')); 7 | 8 | var provider = new Web3.providers.HttpProvider("http://localhost:18545"); 9 | var EthLog = contract(EthLogJSON); 10 | EthLog.setProvider(provider); 11 | var devnetAddress = "0x9CA9d2D5E04012C9Ed24C0e513C9bfAa4A2dD77f"; 12 | 13 | EthLog.deployed().then(function(instance) { 14 | return instance.logEvent({from: devnetAddress}); 15 | }).then(console.log, console.log); 16 | -------------------------------------------------------------------------------- /echo_server/send_runlog_transaction.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var Web3 = require('web3'), 4 | contract = require("truffle-contract"), 5 | path = require('path') 6 | RunLogJSON = require(path.join(__dirname, 'build/contracts/RunLog.json')); 7 | 8 | var provider = new Web3.providers.HttpProvider("http://localhost:18545"); 9 | var RunLog = contract(RunLogJSON); 10 | RunLog.setProvider(provider); 11 | var devnetAddress = "0x9CA9d2D5E04012C9Ed24C0e513C9bfAa4A2dD77f"; 12 | 13 | RunLog.deployed().then(function(instance) { 14 | return instance.request({from: devnetAddress}); 15 | }).then(console.log, console.log); 16 | -------------------------------------------------------------------------------- /echo_server/truffle.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | networks: { 3 | development: { 4 | host: "127.0.0.1", 5 | port: 18545, 6 | network_id: "*", 7 | gas: 4700000 8 | } 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /echo_server/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@~1.3.4: 6 | version "1.3.4" 7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" 8 | dependencies: 9 | mime-types "~2.1.16" 10 | negotiator "0.6.1" 11 | 12 | ajv@^5.1.1: 13 | version "5.5.2" 14 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 15 | dependencies: 16 | co "^4.6.0" 17 | fast-deep-equal "^1.0.0" 18 | fast-json-stable-stringify "^2.0.0" 19 | json-schema-traverse "^0.3.0" 20 | 21 | ansi-regex@^2.0.0: 22 | version "2.1.1" 23 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 24 | 25 | array-flatten@1.1.1: 26 | version "1.1.1" 27 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 28 | 29 | balanced-match@^1.0.0: 30 | version "1.0.0" 31 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 32 | 33 | "bignumber.js@git+https://github.com/frozeman/bignumber.js-nolookahead.git": 34 | version "2.0.7" 35 | resolved "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" 36 | 37 | bn.js@4.11.6: 38 | version "4.11.6" 39 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" 40 | 41 | body-parser@1.18.2: 42 | version "1.18.2" 43 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" 44 | dependencies: 45 | bytes "3.0.0" 46 | content-type "~1.0.4" 47 | debug "2.6.9" 48 | depd "~1.1.1" 49 | http-errors "~1.6.2" 50 | iconv-lite "0.4.19" 51 | on-finished "~2.3.0" 52 | qs "6.5.1" 53 | raw-body "2.3.2" 54 | type-is "~1.6.15" 55 | 56 | brace-expansion@^1.1.7: 57 | version "1.1.11" 58 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 59 | dependencies: 60 | balanced-match "^1.0.0" 61 | concat-map "0.0.1" 62 | 63 | browser-stdout@1.3.0: 64 | version "1.3.0" 65 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 66 | 67 | builtin-modules@^1.0.0: 68 | version "1.1.1" 69 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 70 | 71 | bytes@3.0.0: 72 | version "3.0.0" 73 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 74 | 75 | camelcase@^3.0.0: 76 | version "3.0.0" 77 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 78 | 79 | "chainlink@github:smartcontractkit/chainlink": 80 | version "0.0.0" 81 | resolved "https://codeload.github.com/smartcontractkit/chainlink/tar.gz/42e8a59a5fe96d2a3603203f7afa55f674c8b54d" 82 | 83 | cliui@^3.2.0: 84 | version "3.2.0" 85 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 86 | dependencies: 87 | string-width "^1.0.1" 88 | strip-ansi "^3.0.1" 89 | wrap-ansi "^2.0.0" 90 | 91 | co@^4.6.0: 92 | version "4.6.0" 93 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 94 | 95 | code-point-at@^1.0.0: 96 | version "1.1.0" 97 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 98 | 99 | commander@2.9.0: 100 | version "2.9.0" 101 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 102 | dependencies: 103 | graceful-readlink ">= 1.0.0" 104 | 105 | concat-map@0.0.1: 106 | version "0.0.1" 107 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 108 | 109 | content-disposition@0.5.2: 110 | version "0.5.2" 111 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 112 | 113 | content-type@~1.0.4: 114 | version "1.0.4" 115 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 116 | 117 | cookie-signature@1.0.6: 118 | version "1.0.6" 119 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 120 | 121 | cookie@0.3.1: 122 | version "0.3.1" 123 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 124 | 125 | crypto-js@^3.1.4: 126 | version "3.1.8" 127 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.8.tgz#715f070bf6014f2ae992a98b3929258b713f08d5" 128 | 129 | crypto-js@^3.1.9-1: 130 | version "3.1.9-1" 131 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.9-1.tgz#fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8" 132 | 133 | debug@2.6.8: 134 | version "2.6.8" 135 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 136 | dependencies: 137 | ms "2.0.0" 138 | 139 | debug@2.6.9: 140 | version "2.6.9" 141 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 142 | dependencies: 143 | ms "2.0.0" 144 | 145 | decamelize@^1.1.1: 146 | version "1.2.0" 147 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 148 | 149 | depd@1.1.1: 150 | version "1.1.1" 151 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 152 | 153 | depd@~1.1.1: 154 | version "1.1.2" 155 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 156 | 157 | destroy@~1.0.4: 158 | version "1.0.4" 159 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 160 | 161 | diff@3.2.0: 162 | version "3.2.0" 163 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 164 | 165 | dotenv@^4.0.0: 166 | version "4.0.0" 167 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" 168 | 169 | ee-first@1.1.1: 170 | version "1.1.1" 171 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 172 | 173 | encodeurl@~1.0.1: 174 | version "1.0.2" 175 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 176 | 177 | error-ex@^1.2.0: 178 | version "1.3.1" 179 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 180 | dependencies: 181 | is-arrayish "^0.2.1" 182 | 183 | escape-html@~1.0.3: 184 | version "1.0.3" 185 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 186 | 187 | escape-string-regexp@1.0.5: 188 | version "1.0.5" 189 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 190 | 191 | etag@~1.8.1: 192 | version "1.8.1" 193 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 194 | 195 | ethjs-abi@0.1.8: 196 | version "0.1.8" 197 | resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.1.8.tgz#cd288583ed628cdfadaf8adefa3ba1dbcbca6c18" 198 | dependencies: 199 | bn.js "4.11.6" 200 | js-sha3 "0.5.5" 201 | number-to-bn "1.7.0" 202 | 203 | ethjs-abi@^0.2.1: 204 | version "0.2.1" 205 | resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.2.1.tgz#e0a7a93a7e81163a94477bad56ede524ab6de533" 206 | dependencies: 207 | bn.js "4.11.6" 208 | js-sha3 "0.5.5" 209 | number-to-bn "1.7.0" 210 | 211 | express@^4.16.2: 212 | version "4.16.2" 213 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" 214 | dependencies: 215 | accepts "~1.3.4" 216 | array-flatten "1.1.1" 217 | body-parser "1.18.2" 218 | content-disposition "0.5.2" 219 | content-type "~1.0.4" 220 | cookie "0.3.1" 221 | cookie-signature "1.0.6" 222 | debug "2.6.9" 223 | depd "~1.1.1" 224 | encodeurl "~1.0.1" 225 | escape-html "~1.0.3" 226 | etag "~1.8.1" 227 | finalhandler "1.1.0" 228 | fresh "0.5.2" 229 | merge-descriptors "1.0.1" 230 | methods "~1.1.2" 231 | on-finished "~2.3.0" 232 | parseurl "~1.3.2" 233 | path-to-regexp "0.1.7" 234 | proxy-addr "~2.0.2" 235 | qs "6.5.1" 236 | range-parser "~1.2.0" 237 | safe-buffer "5.1.1" 238 | send "0.16.1" 239 | serve-static "1.13.1" 240 | setprototypeof "1.1.0" 241 | statuses "~1.3.1" 242 | type-is "~1.6.15" 243 | utils-merge "1.0.1" 244 | vary "~1.1.2" 245 | 246 | fast-deep-equal@^1.0.0: 247 | version "1.0.0" 248 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" 249 | 250 | fast-json-stable-stringify@^2.0.0: 251 | version "2.0.0" 252 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 253 | 254 | finalhandler@1.1.0: 255 | version "1.1.0" 256 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" 257 | dependencies: 258 | debug "2.6.9" 259 | encodeurl "~1.0.1" 260 | escape-html "~1.0.3" 261 | on-finished "~2.3.0" 262 | parseurl "~1.3.2" 263 | statuses "~1.3.1" 264 | unpipe "~1.0.0" 265 | 266 | find-up@^1.0.0: 267 | version "1.1.2" 268 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 269 | dependencies: 270 | path-exists "^2.0.0" 271 | pinkie-promise "^2.0.0" 272 | 273 | forwarded@~0.1.2: 274 | version "0.1.2" 275 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 276 | 277 | fresh@0.5.2: 278 | version "0.5.2" 279 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 280 | 281 | fs-extra@^0.30.0: 282 | version "0.30.0" 283 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" 284 | dependencies: 285 | graceful-fs "^4.1.2" 286 | jsonfile "^2.1.0" 287 | klaw "^1.0.0" 288 | path-is-absolute "^1.0.0" 289 | rimraf "^2.2.8" 290 | 291 | fs.realpath@^1.0.0: 292 | version "1.0.0" 293 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 294 | 295 | get-caller-file@^1.0.1: 296 | version "1.0.2" 297 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 298 | 299 | glob@7.1.1: 300 | version "7.1.1" 301 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 302 | dependencies: 303 | fs.realpath "^1.0.0" 304 | inflight "^1.0.4" 305 | inherits "2" 306 | minimatch "^3.0.2" 307 | once "^1.3.0" 308 | path-is-absolute "^1.0.0" 309 | 310 | glob@^7.0.5: 311 | version "7.1.2" 312 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 313 | dependencies: 314 | fs.realpath "^1.0.0" 315 | inflight "^1.0.4" 316 | inherits "2" 317 | minimatch "^3.0.4" 318 | once "^1.3.0" 319 | path-is-absolute "^1.0.0" 320 | 321 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 322 | version "4.1.11" 323 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 324 | 325 | "graceful-readlink@>= 1.0.0": 326 | version "1.0.1" 327 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 328 | 329 | growl@1.9.2: 330 | version "1.9.2" 331 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 332 | 333 | has-flag@^1.0.0: 334 | version "1.0.0" 335 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 336 | 337 | he@1.1.1: 338 | version "1.1.1" 339 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 340 | 341 | hosted-git-info@^2.1.4: 342 | version "2.5.0" 343 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" 344 | 345 | http-errors@1.6.2, http-errors@~1.6.2: 346 | version "1.6.2" 347 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 348 | dependencies: 349 | depd "1.1.1" 350 | inherits "2.0.3" 351 | setprototypeof "1.0.3" 352 | statuses ">= 1.3.1 < 2" 353 | 354 | iconv-lite@0.4.19: 355 | version "0.4.19" 356 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 357 | 358 | inflight@^1.0.4: 359 | version "1.0.6" 360 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 361 | dependencies: 362 | once "^1.3.0" 363 | wrappy "1" 364 | 365 | inherits@2, inherits@2.0.3: 366 | version "2.0.3" 367 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 368 | 369 | invert-kv@^1.0.0: 370 | version "1.0.0" 371 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 372 | 373 | ipaddr.js@1.5.2: 374 | version "1.5.2" 375 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" 376 | 377 | is-arrayish@^0.2.1: 378 | version "0.2.1" 379 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 380 | 381 | is-builtin-module@^1.0.0: 382 | version "1.0.0" 383 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 384 | dependencies: 385 | builtin-modules "^1.0.0" 386 | 387 | is-fullwidth-code-point@^1.0.0: 388 | version "1.0.0" 389 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 390 | dependencies: 391 | number-is-nan "^1.0.0" 392 | 393 | is-hex-prefixed@1.0.0: 394 | version "1.0.0" 395 | resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" 396 | 397 | is-utf8@^0.2.0: 398 | version "0.2.1" 399 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 400 | 401 | js-sha3@0.5.5: 402 | version "0.5.5" 403 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" 404 | 405 | json-schema-traverse@^0.3.0: 406 | version "0.3.1" 407 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 408 | 409 | json3@3.3.2: 410 | version "3.3.2" 411 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 412 | 413 | jsonfile@^2.1.0: 414 | version "2.4.0" 415 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 416 | optionalDependencies: 417 | graceful-fs "^4.1.6" 418 | 419 | klaw@^1.0.0: 420 | version "1.3.1" 421 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 422 | optionalDependencies: 423 | graceful-fs "^4.1.9" 424 | 425 | lcid@^1.0.0: 426 | version "1.0.0" 427 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 428 | dependencies: 429 | invert-kv "^1.0.0" 430 | 431 | load-json-file@^1.0.0: 432 | version "1.1.0" 433 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 434 | dependencies: 435 | graceful-fs "^4.1.2" 436 | parse-json "^2.2.0" 437 | pify "^2.0.0" 438 | pinkie-promise "^2.0.0" 439 | strip-bom "^2.0.0" 440 | 441 | lodash._baseassign@^3.0.0: 442 | version "3.2.0" 443 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 444 | dependencies: 445 | lodash._basecopy "^3.0.0" 446 | lodash.keys "^3.0.0" 447 | 448 | lodash._basecopy@^3.0.0: 449 | version "3.0.1" 450 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 451 | 452 | lodash._basecreate@^3.0.0: 453 | version "3.0.3" 454 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 455 | 456 | lodash._getnative@^3.0.0: 457 | version "3.9.1" 458 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 459 | 460 | lodash._isiterateecall@^3.0.0: 461 | version "3.0.9" 462 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 463 | 464 | lodash.assign@^4.0.3, lodash.assign@^4.0.6: 465 | version "4.2.0" 466 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 467 | 468 | lodash.create@3.1.1: 469 | version "3.1.1" 470 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 471 | dependencies: 472 | lodash._baseassign "^3.0.0" 473 | lodash._basecreate "^3.0.0" 474 | lodash._isiterateecall "^3.0.0" 475 | 476 | lodash.isarguments@^3.0.0: 477 | version "3.1.0" 478 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 479 | 480 | lodash.isarray@^3.0.0: 481 | version "3.0.4" 482 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 483 | 484 | lodash.keys@^3.0.0: 485 | version "3.1.2" 486 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 487 | dependencies: 488 | lodash._getnative "^3.0.0" 489 | lodash.isarguments "^3.0.0" 490 | lodash.isarray "^3.0.0" 491 | 492 | media-typer@0.3.0: 493 | version "0.3.0" 494 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 495 | 496 | memorystream@^0.3.1: 497 | version "0.3.1" 498 | resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" 499 | 500 | merge-descriptors@1.0.1: 501 | version "1.0.1" 502 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 503 | 504 | methods@~1.1.2: 505 | version "1.1.2" 506 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 507 | 508 | mime-db@~1.30.0: 509 | version "1.30.0" 510 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 511 | 512 | mime-types@~2.1.15, mime-types@~2.1.16: 513 | version "2.1.17" 514 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 515 | dependencies: 516 | mime-db "~1.30.0" 517 | 518 | mime@1.4.1: 519 | version "1.4.1" 520 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 521 | 522 | minimatch@^3.0.2, minimatch@^3.0.4: 523 | version "3.0.4" 524 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 525 | dependencies: 526 | brace-expansion "^1.1.7" 527 | 528 | minimist@0.0.8: 529 | version "0.0.8" 530 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 531 | 532 | mkdirp@0.5.1: 533 | version "0.5.1" 534 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 535 | dependencies: 536 | minimist "0.0.8" 537 | 538 | mocha@^3.4.2: 539 | version "3.5.3" 540 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" 541 | dependencies: 542 | browser-stdout "1.3.0" 543 | commander "2.9.0" 544 | debug "2.6.8" 545 | diff "3.2.0" 546 | escape-string-regexp "1.0.5" 547 | glob "7.1.1" 548 | growl "1.9.2" 549 | he "1.1.1" 550 | json3 "3.3.2" 551 | lodash.create "3.1.1" 552 | mkdirp "0.5.1" 553 | supports-color "3.1.2" 554 | 555 | ms@2.0.0: 556 | version "2.0.0" 557 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 558 | 559 | negotiator@0.6.1: 560 | version "0.6.1" 561 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 562 | 563 | normalize-package-data@^2.3.2: 564 | version "2.4.0" 565 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 566 | dependencies: 567 | hosted-git-info "^2.1.4" 568 | is-builtin-module "^1.0.0" 569 | semver "2 || 3 || 4 || 5" 570 | validate-npm-package-license "^3.0.1" 571 | 572 | number-is-nan@^1.0.0: 573 | version "1.0.1" 574 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 575 | 576 | number-to-bn@1.7.0: 577 | version "1.7.0" 578 | resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" 579 | dependencies: 580 | bn.js "4.11.6" 581 | strip-hex-prefix "1.0.0" 582 | 583 | on-finished@~2.3.0: 584 | version "2.3.0" 585 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 586 | dependencies: 587 | ee-first "1.1.1" 588 | 589 | once@^1.3.0: 590 | version "1.4.0" 591 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 592 | dependencies: 593 | wrappy "1" 594 | 595 | original-require@^1.0.1: 596 | version "1.0.1" 597 | resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" 598 | 599 | os-locale@^1.4.0: 600 | version "1.4.0" 601 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 602 | dependencies: 603 | lcid "^1.0.0" 604 | 605 | parse-json@^2.2.0: 606 | version "2.2.0" 607 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 608 | dependencies: 609 | error-ex "^1.2.0" 610 | 611 | parseurl@~1.3.2: 612 | version "1.3.2" 613 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 614 | 615 | path-exists@^2.0.0: 616 | version "2.1.0" 617 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 618 | dependencies: 619 | pinkie-promise "^2.0.0" 620 | 621 | path-is-absolute@^1.0.0: 622 | version "1.0.1" 623 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 624 | 625 | path-to-regexp@0.1.7: 626 | version "0.1.7" 627 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 628 | 629 | path-type@^1.0.0: 630 | version "1.1.0" 631 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 632 | dependencies: 633 | graceful-fs "^4.1.2" 634 | pify "^2.0.0" 635 | pinkie-promise "^2.0.0" 636 | 637 | pify@^2.0.0: 638 | version "2.3.0" 639 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 640 | 641 | pinkie-promise@^2.0.0: 642 | version "2.0.1" 643 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 644 | dependencies: 645 | pinkie "^2.0.0" 646 | 647 | pinkie@^2.0.0: 648 | version "2.0.4" 649 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 650 | 651 | proxy-addr@~2.0.2: 652 | version "2.0.2" 653 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" 654 | dependencies: 655 | forwarded "~0.1.2" 656 | ipaddr.js "1.5.2" 657 | 658 | qs@6.5.1: 659 | version "6.5.1" 660 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 661 | 662 | range-parser@~1.2.0: 663 | version "1.2.0" 664 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 665 | 666 | raw-body@2.3.2: 667 | version "2.3.2" 668 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 669 | dependencies: 670 | bytes "3.0.0" 671 | http-errors "1.6.2" 672 | iconv-lite "0.4.19" 673 | unpipe "1.0.0" 674 | 675 | read-pkg-up@^1.0.1: 676 | version "1.0.1" 677 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 678 | dependencies: 679 | find-up "^1.0.0" 680 | read-pkg "^1.0.0" 681 | 682 | read-pkg@^1.0.0: 683 | version "1.1.0" 684 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 685 | dependencies: 686 | load-json-file "^1.0.0" 687 | normalize-package-data "^2.3.2" 688 | path-type "^1.0.0" 689 | 690 | require-directory@^2.1.1: 691 | version "2.1.1" 692 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 693 | 694 | require-from-string@^1.1.0: 695 | version "1.2.1" 696 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" 697 | 698 | require-main-filename@^1.0.1: 699 | version "1.0.1" 700 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 701 | 702 | rimraf@^2.2.8: 703 | version "2.6.2" 704 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 705 | dependencies: 706 | glob "^7.0.5" 707 | 708 | safe-buffer@5.1.1: 709 | version "5.1.1" 710 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 711 | 712 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: 713 | version "5.5.0" 714 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 715 | 716 | send@0.16.1: 717 | version "0.16.1" 718 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" 719 | dependencies: 720 | debug "2.6.9" 721 | depd "~1.1.1" 722 | destroy "~1.0.4" 723 | encodeurl "~1.0.1" 724 | escape-html "~1.0.3" 725 | etag "~1.8.1" 726 | fresh "0.5.2" 727 | http-errors "~1.6.2" 728 | mime "1.4.1" 729 | ms "2.0.0" 730 | on-finished "~2.3.0" 731 | range-parser "~1.2.0" 732 | statuses "~1.3.1" 733 | 734 | serve-static@1.13.1: 735 | version "1.13.1" 736 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" 737 | dependencies: 738 | encodeurl "~1.0.1" 739 | escape-html "~1.0.3" 740 | parseurl "~1.3.2" 741 | send "0.16.1" 742 | 743 | set-blocking@^2.0.0: 744 | version "2.0.0" 745 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 746 | 747 | setprototypeof@1.0.3: 748 | version "1.0.3" 749 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 750 | 751 | setprototypeof@1.1.0: 752 | version "1.1.0" 753 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 754 | 755 | solc@0.4.19: 756 | version "0.4.19" 757 | resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.19.tgz#1af1c4c292a0365a6977d4cbe3fbee7139b4b561" 758 | dependencies: 759 | fs-extra "^0.30.0" 760 | memorystream "^0.3.1" 761 | require-from-string "^1.1.0" 762 | semver "^5.3.0" 763 | yargs "^4.7.1" 764 | 765 | "solidity-stringutils@github:Arachnid/solidity-stringutils": 766 | version "0.0.0" 767 | resolved "https://codeload.github.com/Arachnid/solidity-stringutils/tar.gz/4c36b494ded3661fdd2210b56fd6acc27d9a8d2a" 768 | 769 | spdx-correct@~1.0.0: 770 | version "1.0.2" 771 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 772 | dependencies: 773 | spdx-license-ids "^1.0.2" 774 | 775 | spdx-expression-parse@~1.0.0: 776 | version "1.0.4" 777 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 778 | 779 | spdx-license-ids@^1.0.2: 780 | version "1.2.2" 781 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 782 | 783 | "statuses@>= 1.3.1 < 2": 784 | version "1.4.0" 785 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 786 | 787 | statuses@~1.3.1: 788 | version "1.3.1" 789 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 790 | 791 | string-width@^1.0.1: 792 | version "1.0.2" 793 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 794 | dependencies: 795 | code-point-at "^1.0.0" 796 | is-fullwidth-code-point "^1.0.0" 797 | strip-ansi "^3.0.0" 798 | 799 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 800 | version "3.0.1" 801 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 802 | dependencies: 803 | ansi-regex "^2.0.0" 804 | 805 | strip-bom@^2.0.0: 806 | version "2.0.0" 807 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 808 | dependencies: 809 | is-utf8 "^0.2.0" 810 | 811 | strip-hex-prefix@1.0.0: 812 | version "1.0.0" 813 | resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" 814 | dependencies: 815 | is-hex-prefixed "1.0.0" 816 | 817 | supports-color@3.1.2: 818 | version "3.1.2" 819 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 820 | dependencies: 821 | has-flag "^1.0.0" 822 | 823 | truffle-blockchain-utils@^0.0.3: 824 | version "0.0.3" 825 | resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.3.tgz#ae8a111ec124d96504f0e042c6f205c0b3817e29" 826 | dependencies: 827 | web3 "^0.20.1" 828 | 829 | truffle-contract-schema@^1.0.0: 830 | version "1.0.1" 831 | resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-1.0.1.tgz#08ceaefe71062a8ac9ab881a77a30fda3744176e" 832 | dependencies: 833 | ajv "^5.1.1" 834 | crypto-js "^3.1.9-1" 835 | 836 | truffle-contract@^3.0.3: 837 | version "3.0.3" 838 | resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-3.0.3.tgz#b14fb318f9a743db8b061046e24978d91f31dbfb" 839 | dependencies: 840 | ethjs-abi "0.1.8" 841 | truffle-blockchain-utils "^0.0.3" 842 | truffle-contract-schema "^1.0.0" 843 | truffle-error "0.0.2" 844 | web3 "^0.20.1" 845 | 846 | truffle-error@0.0.2: 847 | version "0.0.2" 848 | resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.2.tgz#01b189b78505566ae1689c239c7ca2dd121cfe4c" 849 | 850 | truffle@^4.0.6: 851 | version "4.0.6" 852 | resolved "https://registry.yarnpkg.com/truffle/-/truffle-4.0.6.tgz#04a23b4c75336f325804d262317f901dbab4f729" 853 | dependencies: 854 | mocha "^3.4.2" 855 | original-require "^1.0.1" 856 | solc "0.4.19" 857 | 858 | type-is@~1.6.15: 859 | version "1.6.15" 860 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" 861 | dependencies: 862 | media-typer "0.3.0" 863 | mime-types "~2.1.15" 864 | 865 | unpipe@1.0.0, unpipe@~1.0.0: 866 | version "1.0.0" 867 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 868 | 869 | utf8@^2.1.1: 870 | version "2.1.2" 871 | resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96" 872 | 873 | utils-merge@1.0.1: 874 | version "1.0.1" 875 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 876 | 877 | validate-npm-package-license@^3.0.1: 878 | version "3.0.1" 879 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 880 | dependencies: 881 | spdx-correct "~1.0.0" 882 | spdx-expression-parse "~1.0.0" 883 | 884 | vary@~1.1.2: 885 | version "1.1.2" 886 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 887 | 888 | web3@^0.20.1: 889 | version "0.20.5" 890 | resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.5.tgz#c5048d35f7bf4e2c4c280ce51fbbbc951290b165" 891 | dependencies: 892 | bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git" 893 | crypto-js "^3.1.4" 894 | utf8 "^2.1.1" 895 | xhr2 "*" 896 | xmlhttprequest "*" 897 | 898 | which-module@^1.0.0: 899 | version "1.0.0" 900 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 901 | 902 | window-size@^0.2.0: 903 | version "0.2.0" 904 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" 905 | 906 | wrap-ansi@^2.0.0: 907 | version "2.1.0" 908 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 909 | dependencies: 910 | string-width "^1.0.1" 911 | strip-ansi "^3.0.1" 912 | 913 | wrappy@1: 914 | version "1.0.2" 915 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 916 | 917 | xhr2@*: 918 | version "0.1.4" 919 | resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" 920 | 921 | xmlhttprequest@*: 922 | version "1.8.0" 923 | resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" 924 | 925 | y18n@^3.2.1: 926 | version "3.2.1" 927 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 928 | 929 | yargs-parser@^2.4.1: 930 | version "2.4.1" 931 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" 932 | dependencies: 933 | camelcase "^3.0.0" 934 | lodash.assign "^4.0.6" 935 | 936 | yargs@^4.7.1: 937 | version "4.8.1" 938 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" 939 | dependencies: 940 | cliui "^3.2.0" 941 | decamelize "^1.1.1" 942 | get-caller-file "^1.0.1" 943 | lodash.assign "^4.0.3" 944 | os-locale "^1.4.0" 945 | read-pkg-up "^1.0.1" 946 | require-directory "^2.1.1" 947 | require-main-filename "^1.0.1" 948 | set-blocking "^2.0.0" 949 | string-width "^1.0.1" 950 | which-module "^1.0.0" 951 | window-size "^0.2.0" 952 | y18n "^3.2.1" 953 | yargs-parser "^2.4.1" 954 | 955 | zeppelin-solidity@^1.6.0: 956 | version "1.6.0" 957 | resolved "https://registry.yarnpkg.com/zeppelin-solidity/-/zeppelin-solidity-1.6.0.tgz#c1048de286124cdcdb7e2492c2890ddfde04dd84" 958 | dependencies: 959 | dotenv "^4.0.0" 960 | ethjs-abi "^0.2.1" 961 | -------------------------------------------------------------------------------- /twilio_sms/HitMeOnMyBeeper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smartcontractkit/hello_chainlink/67e8a78bfc11175b79d7266891e6c2362971c43f/twilio_sms/HitMeOnMyBeeper.jpg -------------------------------------------------------------------------------- /twilio_sms/README.md: -------------------------------------------------------------------------------- 1 | # Make Money, Hit Me On My Beeper 2 | 3 | [![Hit Me On My Beeper](HitMeOnMyBeeper.jpg?raw=true "Hit Me On My Beeper")](https://www.youtube.com/watch?v=-4Wu-zSndlw&t=13s) 4 | 5 | In this example, we will send a text message when a contract address receives ether. 6 | This will link Ethereum events (on-chain) with the [Twilio](https://www.twilio.com) SMS service 7 | (off-chain) using Chainlink (CL) 8 | 9 | ## Configure and run [Chainlink development environment](../README.md) 10 | 11 | ## Sign up for a free Twilio account 12 | 13 | - https://www.twilio.com/try-twilio 14 | 15 | ## Run Node Server 16 | 17 | This Node JS server relays messages from Chainlink jobs to Twilio. 18 | 19 | - `yarn install` 20 | - `node twilio.js ` 21 | - i.e. `./twilio.js AC97fade171cxxxxxxxxxxxxxxxxxxxxxx ffab4f5ecc65acxxxxxxefe99xxxxx "+1 786-555-5555" 3055555555`. 22 | 23 | ## Create Chainlink Job and Smart Contract (where you will send the money) 24 | 25 | - `truffle migrate`, remember the contract address (0x...) of the migration above. 26 | - `./create_twilio_job_for 0x...` pass contract address as argument 27 | 28 | ## Send Money 29 | 30 | - `./send_money_to 0x...` pass contract address as argument 31 | 32 | ## Celebrate 33 | 34 | [![Hit Me On My Beeper](HitMeOnMyBeeper.jpg?raw=true "Hit Me On My Beeper")](https://www.youtube.com/watch?v=-4Wu-zSndlw&t=13s) 35 | -------------------------------------------------------------------------------- /twilio_sms/contracts/GetMoney.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.18; 2 | 3 | contract GetMoney { 4 | address[] public payees; 5 | event LogMoney(uint256 indexed amount); 6 | 7 | function receive() public payable { 8 | payees.push(msg.sender); 9 | LogMoney(msg.value); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /twilio_sms/contracts/Migrations.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.17; 2 | 3 | contract Migrations { 4 | address public owner; 5 | uint public last_completed_migration; 6 | 7 | modifier restricted() { 8 | if (msg.sender == owner) _; 9 | } 10 | 11 | function Migrations() public { 12 | owner = msg.sender; 13 | } 14 | 15 | function setCompleted(uint completed) public restricted { 16 | last_completed_migration = completed; 17 | } 18 | 19 | function upgrade(address new_address) public restricted { 20 | Migrations upgraded = Migrations(new_address); 21 | upgraded.setCompleted(last_completed_migration); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /twilio_sms/create_twilio_job_for: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | if (process.argv.length <= 2) { 4 | console.log("Usage: " + __filename + " "); 5 | process.exit(-1); 6 | } 7 | 8 | const job = { 9 | "_comment": "An ethlog with a specific address only listens to that address.", 10 | "initiators": [{ "type": "ethlog", "address": process.argv[2]}], 11 | "tasks": [{ "type": "HttpPost", "url": "http://localhost:6691" }] 12 | }; 13 | 14 | const request = require('request'); 15 | request.post({ 16 | url: 'http://localhost:6688/v2/specs', 17 | body: job, 18 | json: true, 19 | auth: {username: 'chainlink', password: 'twochains'} 20 | }, function(err, response, body) { console.log(body) }); 21 | -------------------------------------------------------------------------------- /twilio_sms/migrations/1_initial_migration.js: -------------------------------------------------------------------------------- 1 | var Migrations = artifacts.require("./Migrations.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Migrations); 5 | }; 6 | -------------------------------------------------------------------------------- /twilio_sms/migrations/2_get_money.js: -------------------------------------------------------------------------------- 1 | var GetMoney = artifacts.require("./GetMoney.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(GetMoney); 5 | }; 6 | -------------------------------------------------------------------------------- /twilio_sms/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "express": "^4.16.2", 4 | "request": "^2.83.0", 5 | "truffle": "^4.0.6", 6 | "truffle-contract": "^3.0.3", 7 | "twilio": "^3.11.3" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /twilio_sms/send_money_to: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | if (process.argv.length <= 2) { 4 | console.log("Usage: " + __filename + " "); 5 | process.exit(-1); 6 | } 7 | 8 | const web3 = require('web3'), 9 | contract = require("truffle-contract"), 10 | path = require('path') 11 | GetMoneyJSON = require(path.join(__dirname, 'build/contracts/GetMoney.json')); 12 | 13 | var provider = new web3.providers.HttpProvider("http://localhost:18545"); 14 | var GetMoney = contract(GetMoneyJSON); 15 | GetMoney.setProvider(provider); 16 | var devnetAddress = "0x9CA9d2D5E04012C9Ed24C0e513C9bfAa4A2dD77f"; 17 | 18 | GetMoney.deployed().then(function(instance) { 19 | return instance.receive({value: 305, from: devnetAddress}); 20 | }).then(console.log, console.log); 21 | -------------------------------------------------------------------------------- /twilio_sms/truffle.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | networks: { 3 | development: { 4 | host: "127.0.0.1", 5 | port: 18545, 6 | network_id: "*", 7 | gas: 4700000 8 | } 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /twilio_sms/twilio.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | if (process.argv.length <= 3) { 4 | console.log("Usage: " + __filename + " "); 5 | process.exit(-1); 6 | } 7 | 8 | const express = require('express'); 9 | const body_parser = require('body-parser'); 10 | const app = express(); 11 | const PORT = 6691 12 | 13 | const [accountSid, authToken, from, to] = process.argv.slice(2) 14 | const client = require('twilio')(accountSid, authToken); 15 | 16 | app.use(body_parser.json()) 17 | app.all('*', function (req, res) { 18 | let log = req.body 19 | let amount = parseInt(log.topics[1], 16); 20 | let message = "Hello Chainlink! You just sent received " + amount + " wei at " + log.address; 21 | console.log("Sending text from " + from + " to " + to + " with message: " + message); 22 | client.messages.create({ 23 | from: from, 24 | to: to, 25 | body: message, 26 | }).then(null, console.log); 27 | 28 | res.json({body: {status: "ok"}}); 29 | }) 30 | 31 | app.listen(PORT, function () { 32 | console.log("listening on port " + PORT + " for incoming ether"); 33 | }) 34 | -------------------------------------------------------------------------------- /twilio_sms/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@~1.3.4: 6 | version "1.3.4" 7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" 8 | dependencies: 9 | mime-types "~2.1.16" 10 | negotiator "0.6.1" 11 | 12 | ajv@^5.1.0, ajv@^5.1.1: 13 | version "5.5.2" 14 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 15 | dependencies: 16 | co "^4.6.0" 17 | fast-deep-equal "^1.0.0" 18 | fast-json-stable-stringify "^2.0.0" 19 | json-schema-traverse "^0.3.0" 20 | 21 | ansi-regex@^2.0.0: 22 | version "2.1.1" 23 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 24 | 25 | array-flatten@1.1.1: 26 | version "1.1.1" 27 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 28 | 29 | asap@^2.0.0: 30 | version "2.0.6" 31 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 32 | 33 | asn1@~0.2.3: 34 | version "0.2.3" 35 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 36 | 37 | assert-plus@1.0.0, assert-plus@^1.0.0: 38 | version "1.0.0" 39 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 40 | 41 | asynckit@^0.4.0: 42 | version "0.4.0" 43 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 44 | 45 | aws-sign2@~0.7.0: 46 | version "0.7.0" 47 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 48 | 49 | aws4@^1.6.0: 50 | version "1.6.0" 51 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 52 | 53 | balanced-match@^1.0.0: 54 | version "1.0.0" 55 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 56 | 57 | base64url@2.0.0, base64url@^2.0.0: 58 | version "2.0.0" 59 | resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" 60 | 61 | bcrypt-pbkdf@^1.0.0: 62 | version "1.0.1" 63 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 64 | dependencies: 65 | tweetnacl "^0.14.3" 66 | 67 | "bignumber.js@git+https://github.com/frozeman/bignumber.js-nolookahead.git": 68 | version "2.0.7" 69 | resolved "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" 70 | 71 | bn.js@4.11.6: 72 | version "4.11.6" 73 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" 74 | 75 | body-parser@1.18.2: 76 | version "1.18.2" 77 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" 78 | dependencies: 79 | bytes "3.0.0" 80 | content-type "~1.0.4" 81 | debug "2.6.9" 82 | depd "~1.1.1" 83 | http-errors "~1.6.2" 84 | iconv-lite "0.4.19" 85 | on-finished "~2.3.0" 86 | qs "6.5.1" 87 | raw-body "2.3.2" 88 | type-is "~1.6.15" 89 | 90 | boom@4.x.x: 91 | version "4.3.1" 92 | resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" 93 | dependencies: 94 | hoek "4.x.x" 95 | 96 | boom@5.x.x: 97 | version "5.2.0" 98 | resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" 99 | dependencies: 100 | hoek "4.x.x" 101 | 102 | brace-expansion@^1.1.7: 103 | version "1.1.11" 104 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 105 | dependencies: 106 | balanced-match "^1.0.0" 107 | concat-map "0.0.1" 108 | 109 | browser-stdout@1.3.0: 110 | version "1.3.0" 111 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 112 | 113 | buffer-equal-constant-time@1.0.1: 114 | version "1.0.1" 115 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 116 | 117 | builtin-modules@^1.0.0: 118 | version "1.1.1" 119 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 120 | 121 | bytes@3.0.0: 122 | version "3.0.0" 123 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 124 | 125 | camelcase@^3.0.0: 126 | version "3.0.0" 127 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 128 | 129 | caseless@~0.12.0: 130 | version "0.12.0" 131 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 132 | 133 | cliui@^3.2.0: 134 | version "3.2.0" 135 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 136 | dependencies: 137 | string-width "^1.0.1" 138 | strip-ansi "^3.0.1" 139 | wrap-ansi "^2.0.0" 140 | 141 | co@^4.6.0: 142 | version "4.6.0" 143 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 144 | 145 | code-point-at@^1.0.0: 146 | version "1.1.0" 147 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 148 | 149 | combined-stream@1.0.6, combined-stream@~1.0.5: 150 | version "1.0.6" 151 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 152 | dependencies: 153 | delayed-stream "~1.0.0" 154 | 155 | commander@2.9.0: 156 | version "2.9.0" 157 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 158 | dependencies: 159 | graceful-readlink ">= 1.0.0" 160 | 161 | concat-map@0.0.1: 162 | version "0.0.1" 163 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 164 | 165 | content-disposition@0.5.2: 166 | version "0.5.2" 167 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 168 | 169 | content-type@~1.0.4: 170 | version "1.0.4" 171 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 172 | 173 | cookie-signature@1.0.6: 174 | version "1.0.6" 175 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 176 | 177 | cookie@0.3.1: 178 | version "0.3.1" 179 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 180 | 181 | core-util-is@1.0.2: 182 | version "1.0.2" 183 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 184 | 185 | cryptiles@3.x.x: 186 | version "3.1.2" 187 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" 188 | dependencies: 189 | boom "5.x.x" 190 | 191 | crypto-js@^3.1.4: 192 | version "3.1.8" 193 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.8.tgz#715f070bf6014f2ae992a98b3929258b713f08d5" 194 | 195 | crypto-js@^3.1.9-1: 196 | version "3.1.9-1" 197 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.9-1.tgz#fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8" 198 | 199 | dashdash@^1.12.0: 200 | version "1.14.1" 201 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 202 | dependencies: 203 | assert-plus "^1.0.0" 204 | 205 | debug@2.6.8: 206 | version "2.6.8" 207 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 208 | dependencies: 209 | ms "2.0.0" 210 | 211 | debug@2.6.9: 212 | version "2.6.9" 213 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 214 | dependencies: 215 | ms "2.0.0" 216 | 217 | decamelize@^1.1.1: 218 | version "1.2.0" 219 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 220 | 221 | delayed-stream@~1.0.0: 222 | version "1.0.0" 223 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 224 | 225 | depd@1.1.1: 226 | version "1.1.1" 227 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 228 | 229 | depd@~1.1.1: 230 | version "1.1.2" 231 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 232 | 233 | deprecate@1.0.0: 234 | version "1.0.0" 235 | resolved "https://registry.yarnpkg.com/deprecate/-/deprecate-1.0.0.tgz#661490ed2428916a6c8883d8834e5646f4e4a4a8" 236 | 237 | destroy@~1.0.4: 238 | version "1.0.4" 239 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 240 | 241 | diff@3.2.0: 242 | version "3.2.0" 243 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 244 | 245 | ecc-jsbn@~0.1.1: 246 | version "0.1.1" 247 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 248 | dependencies: 249 | jsbn "~0.1.0" 250 | 251 | ecdsa-sig-formatter@1.0.9: 252 | version "1.0.9" 253 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" 254 | dependencies: 255 | base64url "^2.0.0" 256 | safe-buffer "^5.0.1" 257 | 258 | ee-first@1.1.1: 259 | version "1.1.1" 260 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 261 | 262 | encodeurl@~1.0.1: 263 | version "1.0.2" 264 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 265 | 266 | error-ex@^1.2.0: 267 | version "1.3.1" 268 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 269 | dependencies: 270 | is-arrayish "^0.2.1" 271 | 272 | escape-html@~1.0.3: 273 | version "1.0.3" 274 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 275 | 276 | escape-string-regexp@1.0.5: 277 | version "1.0.5" 278 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 279 | 280 | etag@~1.8.1: 281 | version "1.8.1" 282 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 283 | 284 | ethjs-abi@0.1.8: 285 | version "0.1.8" 286 | resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.1.8.tgz#cd288583ed628cdfadaf8adefa3ba1dbcbca6c18" 287 | dependencies: 288 | bn.js "4.11.6" 289 | js-sha3 "0.5.5" 290 | number-to-bn "1.7.0" 291 | 292 | express@^4.16.2: 293 | version "4.16.2" 294 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" 295 | dependencies: 296 | accepts "~1.3.4" 297 | array-flatten "1.1.1" 298 | body-parser "1.18.2" 299 | content-disposition "0.5.2" 300 | content-type "~1.0.4" 301 | cookie "0.3.1" 302 | cookie-signature "1.0.6" 303 | debug "2.6.9" 304 | depd "~1.1.1" 305 | encodeurl "~1.0.1" 306 | escape-html "~1.0.3" 307 | etag "~1.8.1" 308 | finalhandler "1.1.0" 309 | fresh "0.5.2" 310 | merge-descriptors "1.0.1" 311 | methods "~1.1.2" 312 | on-finished "~2.3.0" 313 | parseurl "~1.3.2" 314 | path-to-regexp "0.1.7" 315 | proxy-addr "~2.0.2" 316 | qs "6.5.1" 317 | range-parser "~1.2.0" 318 | safe-buffer "5.1.1" 319 | send "0.16.1" 320 | serve-static "1.13.1" 321 | setprototypeof "1.1.0" 322 | statuses "~1.3.1" 323 | type-is "~1.6.15" 324 | utils-merge "1.0.1" 325 | vary "~1.1.2" 326 | 327 | extend@~3.0.1: 328 | version "3.0.1" 329 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 330 | 331 | extsprintf@1.3.0: 332 | version "1.3.0" 333 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 334 | 335 | extsprintf@^1.2.0: 336 | version "1.4.0" 337 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 338 | 339 | fast-deep-equal@^1.0.0: 340 | version "1.0.0" 341 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" 342 | 343 | fast-json-stable-stringify@^2.0.0: 344 | version "2.0.0" 345 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 346 | 347 | finalhandler@1.1.0: 348 | version "1.1.0" 349 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" 350 | dependencies: 351 | debug "2.6.9" 352 | encodeurl "~1.0.1" 353 | escape-html "~1.0.3" 354 | on-finished "~2.3.0" 355 | parseurl "~1.3.2" 356 | statuses "~1.3.1" 357 | unpipe "~1.0.0" 358 | 359 | find-up@^1.0.0: 360 | version "1.1.2" 361 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 362 | dependencies: 363 | path-exists "^2.0.0" 364 | pinkie-promise "^2.0.0" 365 | 366 | forever-agent@~0.6.1: 367 | version "0.6.1" 368 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 369 | 370 | form-data@~2.3.1: 371 | version "2.3.2" 372 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 373 | dependencies: 374 | asynckit "^0.4.0" 375 | combined-stream "1.0.6" 376 | mime-types "^2.1.12" 377 | 378 | forwarded@~0.1.2: 379 | version "0.1.2" 380 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 381 | 382 | fresh@0.5.2: 383 | version "0.5.2" 384 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 385 | 386 | fs-extra@^0.30.0: 387 | version "0.30.0" 388 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" 389 | dependencies: 390 | graceful-fs "^4.1.2" 391 | jsonfile "^2.1.0" 392 | klaw "^1.0.0" 393 | path-is-absolute "^1.0.0" 394 | rimraf "^2.2.8" 395 | 396 | fs.realpath@^1.0.0: 397 | version "1.0.0" 398 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 399 | 400 | get-caller-file@^1.0.1: 401 | version "1.0.2" 402 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 403 | 404 | getpass@^0.1.1: 405 | version "0.1.7" 406 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 407 | dependencies: 408 | assert-plus "^1.0.0" 409 | 410 | glob@7.1.1: 411 | version "7.1.1" 412 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 413 | dependencies: 414 | fs.realpath "^1.0.0" 415 | inflight "^1.0.4" 416 | inherits "2" 417 | minimatch "^3.0.2" 418 | once "^1.3.0" 419 | path-is-absolute "^1.0.0" 420 | 421 | glob@^7.0.5: 422 | version "7.1.2" 423 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 424 | dependencies: 425 | fs.realpath "^1.0.0" 426 | inflight "^1.0.4" 427 | inherits "2" 428 | minimatch "^3.0.4" 429 | once "^1.3.0" 430 | path-is-absolute "^1.0.0" 431 | 432 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 433 | version "4.1.11" 434 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 435 | 436 | "graceful-readlink@>= 1.0.0": 437 | version "1.0.1" 438 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 439 | 440 | growl@1.9.2: 441 | version "1.9.2" 442 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 443 | 444 | har-schema@^2.0.0: 445 | version "2.0.0" 446 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 447 | 448 | har-validator@~5.0.3: 449 | version "5.0.3" 450 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 451 | dependencies: 452 | ajv "^5.1.0" 453 | har-schema "^2.0.0" 454 | 455 | has-flag@^1.0.0: 456 | version "1.0.0" 457 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 458 | 459 | hawk@~6.0.2: 460 | version "6.0.2" 461 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" 462 | dependencies: 463 | boom "4.x.x" 464 | cryptiles "3.x.x" 465 | hoek "4.x.x" 466 | sntp "2.x.x" 467 | 468 | he@1.1.1: 469 | version "1.1.1" 470 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 471 | 472 | hoek@4.x.x: 473 | version "4.2.1" 474 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" 475 | 476 | hosted-git-info@^2.1.4: 477 | version "2.5.0" 478 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" 479 | 480 | http-errors@1.6.2, http-errors@~1.6.2: 481 | version "1.6.2" 482 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 483 | dependencies: 484 | depd "1.1.1" 485 | inherits "2.0.3" 486 | setprototypeof "1.0.3" 487 | statuses ">= 1.3.1 < 2" 488 | 489 | http-signature@~1.2.0: 490 | version "1.2.0" 491 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 492 | dependencies: 493 | assert-plus "^1.0.0" 494 | jsprim "^1.2.2" 495 | sshpk "^1.7.0" 496 | 497 | iconv-lite@0.4.19: 498 | version "0.4.19" 499 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 500 | 501 | inflight@^1.0.4: 502 | version "1.0.6" 503 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 504 | dependencies: 505 | once "^1.3.0" 506 | wrappy "1" 507 | 508 | inherits@2, inherits@2.0.3: 509 | version "2.0.3" 510 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 511 | 512 | invert-kv@^1.0.0: 513 | version "1.0.0" 514 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 515 | 516 | ipaddr.js@1.6.0: 517 | version "1.6.0" 518 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" 519 | 520 | is-arrayish@^0.2.1: 521 | version "0.2.1" 522 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 523 | 524 | is-builtin-module@^1.0.0: 525 | version "1.0.0" 526 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 527 | dependencies: 528 | builtin-modules "^1.0.0" 529 | 530 | is-fullwidth-code-point@^1.0.0: 531 | version "1.0.0" 532 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 533 | dependencies: 534 | number-is-nan "^1.0.0" 535 | 536 | is-hex-prefixed@1.0.0: 537 | version "1.0.0" 538 | resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" 539 | 540 | is-typedarray@~1.0.0: 541 | version "1.0.0" 542 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 543 | 544 | is-utf8@^0.2.0: 545 | version "0.2.1" 546 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 547 | 548 | isstream@~0.1.2: 549 | version "0.1.2" 550 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 551 | 552 | js-sha3@0.5.5: 553 | version "0.5.5" 554 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" 555 | 556 | jsbn@~0.1.0: 557 | version "0.1.1" 558 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 559 | 560 | json-schema-traverse@^0.3.0: 561 | version "0.3.1" 562 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 563 | 564 | json-schema@0.2.3: 565 | version "0.2.3" 566 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 567 | 568 | json-stringify-safe@~5.0.1: 569 | version "5.0.1" 570 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 571 | 572 | json3@3.3.2: 573 | version "3.3.2" 574 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 575 | 576 | jsonfile@^2.1.0: 577 | version "2.4.0" 578 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 579 | optionalDependencies: 580 | graceful-fs "^4.1.6" 581 | 582 | jsonwebtoken@^8.1.0: 583 | version "8.1.1" 584 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.1.1.tgz#b04d8bb2ad847bc93238c3c92170ffdbdd1cb2ea" 585 | dependencies: 586 | jws "^3.1.4" 587 | lodash.includes "^4.3.0" 588 | lodash.isboolean "^3.0.3" 589 | lodash.isinteger "^4.0.4" 590 | lodash.isnumber "^3.0.3" 591 | lodash.isplainobject "^4.0.6" 592 | lodash.isstring "^4.0.1" 593 | lodash.once "^4.0.0" 594 | ms "^2.1.1" 595 | xtend "^4.0.1" 596 | 597 | jsprim@^1.2.2: 598 | version "1.4.1" 599 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 600 | dependencies: 601 | assert-plus "1.0.0" 602 | extsprintf "1.3.0" 603 | json-schema "0.2.3" 604 | verror "1.10.0" 605 | 606 | jwa@^1.1.4: 607 | version "1.1.5" 608 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" 609 | dependencies: 610 | base64url "2.0.0" 611 | buffer-equal-constant-time "1.0.1" 612 | ecdsa-sig-formatter "1.0.9" 613 | safe-buffer "^5.0.1" 614 | 615 | jws@^3.1.4: 616 | version "3.1.4" 617 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" 618 | dependencies: 619 | base64url "^2.0.0" 620 | jwa "^1.1.4" 621 | safe-buffer "^5.0.1" 622 | 623 | klaw@^1.0.0: 624 | version "1.3.1" 625 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 626 | optionalDependencies: 627 | graceful-fs "^4.1.9" 628 | 629 | lcid@^1.0.0: 630 | version "1.0.0" 631 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 632 | dependencies: 633 | invert-kv "^1.0.0" 634 | 635 | load-json-file@^1.0.0: 636 | version "1.1.0" 637 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 638 | dependencies: 639 | graceful-fs "^4.1.2" 640 | parse-json "^2.2.0" 641 | pify "^2.0.0" 642 | pinkie-promise "^2.0.0" 643 | strip-bom "^2.0.0" 644 | 645 | lodash._baseassign@^3.0.0: 646 | version "3.2.0" 647 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 648 | dependencies: 649 | lodash._basecopy "^3.0.0" 650 | lodash.keys "^3.0.0" 651 | 652 | lodash._basecopy@^3.0.0: 653 | version "3.0.1" 654 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 655 | 656 | lodash._basecreate@^3.0.0: 657 | version "3.0.3" 658 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 659 | 660 | lodash._getnative@^3.0.0: 661 | version "3.9.1" 662 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 663 | 664 | lodash._isiterateecall@^3.0.0: 665 | version "3.0.9" 666 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 667 | 668 | lodash.assign@^4.0.3, lodash.assign@^4.0.6: 669 | version "4.2.0" 670 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 671 | 672 | lodash.create@3.1.1: 673 | version "3.1.1" 674 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 675 | dependencies: 676 | lodash._baseassign "^3.0.0" 677 | lodash._basecreate "^3.0.0" 678 | lodash._isiterateecall "^3.0.0" 679 | 680 | lodash.includes@^4.3.0: 681 | version "4.3.0" 682 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" 683 | 684 | lodash.isarguments@^3.0.0: 685 | version "3.1.0" 686 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 687 | 688 | lodash.isarray@^3.0.0: 689 | version "3.0.4" 690 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 691 | 692 | lodash.isboolean@^3.0.3: 693 | version "3.0.3" 694 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" 695 | 696 | lodash.isinteger@^4.0.4: 697 | version "4.0.4" 698 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" 699 | 700 | lodash.isnumber@^3.0.3: 701 | version "3.0.3" 702 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" 703 | 704 | lodash.isplainobject@^4.0.6: 705 | version "4.0.6" 706 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 707 | 708 | lodash.isstring@^4.0.1: 709 | version "4.0.1" 710 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 711 | 712 | lodash.keys@^3.0.0: 713 | version "3.1.2" 714 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 715 | dependencies: 716 | lodash._getnative "^3.0.0" 717 | lodash.isarguments "^3.0.0" 718 | lodash.isarray "^3.0.0" 719 | 720 | lodash.once@^4.0.0: 721 | version "4.1.1" 722 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 723 | 724 | lodash@4.0.0: 725 | version "4.0.0" 726 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.0.0.tgz#9ac43844c595e28d30108b7ba583703395922dfc" 727 | 728 | media-typer@0.3.0: 729 | version "0.3.0" 730 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 731 | 732 | memorystream@^0.3.1: 733 | version "0.3.1" 734 | resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" 735 | 736 | merge-descriptors@1.0.1: 737 | version "1.0.1" 738 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 739 | 740 | methods@~1.1.2: 741 | version "1.1.2" 742 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 743 | 744 | mime-db@~1.33.0: 745 | version "1.33.0" 746 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 747 | 748 | mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.18: 749 | version "2.1.18" 750 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 751 | dependencies: 752 | mime-db "~1.33.0" 753 | 754 | mime@1.4.1: 755 | version "1.4.1" 756 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 757 | 758 | minimatch@^3.0.2, minimatch@^3.0.4: 759 | version "3.0.4" 760 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 761 | dependencies: 762 | brace-expansion "^1.1.7" 763 | 764 | minimist@0.0.8: 765 | version "0.0.8" 766 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 767 | 768 | mkdirp@0.5.1: 769 | version "0.5.1" 770 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 771 | dependencies: 772 | minimist "0.0.8" 773 | 774 | mocha@^3.4.2: 775 | version "3.5.3" 776 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" 777 | dependencies: 778 | browser-stdout "1.3.0" 779 | commander "2.9.0" 780 | debug "2.6.8" 781 | diff "3.2.0" 782 | escape-string-regexp "1.0.5" 783 | glob "7.1.1" 784 | growl "1.9.2" 785 | he "1.1.1" 786 | json3 "3.3.2" 787 | lodash.create "3.1.1" 788 | mkdirp "0.5.1" 789 | supports-color "3.1.2" 790 | 791 | moment@2.19.3: 792 | version "2.19.3" 793 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.3.tgz#bdb99d270d6d7fda78cc0fbace855e27fe7da69f" 794 | 795 | ms@2.0.0: 796 | version "2.0.0" 797 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 798 | 799 | ms@^2.1.1: 800 | version "2.1.1" 801 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 802 | 803 | negotiator@0.6.1: 804 | version "0.6.1" 805 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 806 | 807 | normalize-package-data@^2.3.2: 808 | version "2.4.0" 809 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 810 | dependencies: 811 | hosted-git-info "^2.1.4" 812 | is-builtin-module "^1.0.0" 813 | semver "2 || 3 || 4 || 5" 814 | validate-npm-package-license "^3.0.1" 815 | 816 | number-is-nan@^1.0.0: 817 | version "1.0.1" 818 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 819 | 820 | number-to-bn@1.7.0: 821 | version "1.7.0" 822 | resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" 823 | dependencies: 824 | bn.js "4.11.6" 825 | strip-hex-prefix "1.0.0" 826 | 827 | oauth-sign@~0.8.2: 828 | version "0.8.2" 829 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 830 | 831 | on-finished@~2.3.0: 832 | version "2.3.0" 833 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 834 | dependencies: 835 | ee-first "1.1.1" 836 | 837 | once@^1.3.0: 838 | version "1.4.0" 839 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 840 | dependencies: 841 | wrappy "1" 842 | 843 | original-require@^1.0.1: 844 | version "1.0.1" 845 | resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" 846 | 847 | os-locale@^1.4.0: 848 | version "1.4.0" 849 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 850 | dependencies: 851 | lcid "^1.0.0" 852 | 853 | parse-json@^2.2.0: 854 | version "2.2.0" 855 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 856 | dependencies: 857 | error-ex "^1.2.0" 858 | 859 | parseurl@~1.3.2: 860 | version "1.3.2" 861 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 862 | 863 | path-exists@^2.0.0: 864 | version "2.1.0" 865 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 866 | dependencies: 867 | pinkie-promise "^2.0.0" 868 | 869 | path-is-absolute@^1.0.0: 870 | version "1.0.1" 871 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 872 | 873 | path-to-regexp@0.1.7: 874 | version "0.1.7" 875 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 876 | 877 | path-type@^1.0.0: 878 | version "1.1.0" 879 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 880 | dependencies: 881 | graceful-fs "^4.1.2" 882 | pify "^2.0.0" 883 | pinkie-promise "^2.0.0" 884 | 885 | performance-now@^2.1.0: 886 | version "2.1.0" 887 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 888 | 889 | pify@^2.0.0: 890 | version "2.3.0" 891 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 892 | 893 | pinkie-promise@^2.0.0: 894 | version "2.0.1" 895 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 896 | dependencies: 897 | pinkie "^2.0.0" 898 | 899 | pinkie@^2.0.0: 900 | version "2.0.4" 901 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 902 | 903 | pop-iterate@^1.0.1: 904 | version "1.0.1" 905 | resolved "https://registry.yarnpkg.com/pop-iterate/-/pop-iterate-1.0.1.tgz#ceacfdab4abf353d7a0f2aaa2c1fc7b3f9413ba3" 906 | 907 | proxy-addr@~2.0.2: 908 | version "2.0.3" 909 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" 910 | dependencies: 911 | forwarded "~0.1.2" 912 | ipaddr.js "1.6.0" 913 | 914 | punycode@^1.4.1: 915 | version "1.4.1" 916 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 917 | 918 | q@2.0.x: 919 | version "2.0.3" 920 | resolved "https://registry.yarnpkg.com/q/-/q-2.0.3.tgz#75b8db0255a1a5af82f58c3f3aaa1efec7d0d134" 921 | dependencies: 922 | asap "^2.0.0" 923 | pop-iterate "^1.0.1" 924 | weak-map "^1.0.5" 925 | 926 | qs@6.5.1, qs@~6.5.1: 927 | version "6.5.1" 928 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 929 | 930 | range-parser@~1.2.0: 931 | version "1.2.0" 932 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 933 | 934 | raw-body@2.3.2: 935 | version "2.3.2" 936 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 937 | dependencies: 938 | bytes "3.0.0" 939 | http-errors "1.6.2" 940 | iconv-lite "0.4.19" 941 | unpipe "1.0.0" 942 | 943 | read-pkg-up@^1.0.1: 944 | version "1.0.1" 945 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 946 | dependencies: 947 | find-up "^1.0.0" 948 | read-pkg "^1.0.0" 949 | 950 | read-pkg@^1.0.0: 951 | version "1.1.0" 952 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 953 | dependencies: 954 | load-json-file "^1.0.0" 955 | normalize-package-data "^2.3.2" 956 | path-type "^1.0.0" 957 | 958 | request@2.83.x, request@^2.83.0: 959 | version "2.83.0" 960 | resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" 961 | dependencies: 962 | aws-sign2 "~0.7.0" 963 | aws4 "^1.6.0" 964 | caseless "~0.12.0" 965 | combined-stream "~1.0.5" 966 | extend "~3.0.1" 967 | forever-agent "~0.6.1" 968 | form-data "~2.3.1" 969 | har-validator "~5.0.3" 970 | hawk "~6.0.2" 971 | http-signature "~1.2.0" 972 | is-typedarray "~1.0.0" 973 | isstream "~0.1.2" 974 | json-stringify-safe "~5.0.1" 975 | mime-types "~2.1.17" 976 | oauth-sign "~0.8.2" 977 | performance-now "^2.1.0" 978 | qs "~6.5.1" 979 | safe-buffer "^5.1.1" 980 | stringstream "~0.0.5" 981 | tough-cookie "~2.3.3" 982 | tunnel-agent "^0.6.0" 983 | uuid "^3.1.0" 984 | 985 | require-directory@^2.1.1: 986 | version "2.1.1" 987 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 988 | 989 | require-from-string@^1.1.0: 990 | version "1.2.1" 991 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" 992 | 993 | require-main-filename@^1.0.1: 994 | version "1.0.1" 995 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 996 | 997 | rimraf@^2.2.8: 998 | version "2.6.2" 999 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1000 | dependencies: 1001 | glob "^7.0.5" 1002 | 1003 | rootpath@0.1.2: 1004 | version "0.1.2" 1005 | resolved "https://registry.yarnpkg.com/rootpath/-/rootpath-0.1.2.tgz#5b379a87dca906e9b91d690a599439bef267ea6b" 1006 | 1007 | safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1: 1008 | version "5.1.1" 1009 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 1010 | 1011 | scmp@0.0.3: 1012 | version "0.0.3" 1013 | resolved "https://registry.yarnpkg.com/scmp/-/scmp-0.0.3.tgz#3648df2d7294641e7f78673ffc29681d9bad9073" 1014 | 1015 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: 1016 | version "5.5.0" 1017 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 1018 | 1019 | send@0.16.1: 1020 | version "0.16.1" 1021 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" 1022 | dependencies: 1023 | debug "2.6.9" 1024 | depd "~1.1.1" 1025 | destroy "~1.0.4" 1026 | encodeurl "~1.0.1" 1027 | escape-html "~1.0.3" 1028 | etag "~1.8.1" 1029 | fresh "0.5.2" 1030 | http-errors "~1.6.2" 1031 | mime "1.4.1" 1032 | ms "2.0.0" 1033 | on-finished "~2.3.0" 1034 | range-parser "~1.2.0" 1035 | statuses "~1.3.1" 1036 | 1037 | serve-static@1.13.1: 1038 | version "1.13.1" 1039 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" 1040 | dependencies: 1041 | encodeurl "~1.0.1" 1042 | escape-html "~1.0.3" 1043 | parseurl "~1.3.2" 1044 | send "0.16.1" 1045 | 1046 | set-blocking@^2.0.0: 1047 | version "2.0.0" 1048 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1049 | 1050 | setprototypeof@1.0.3: 1051 | version "1.0.3" 1052 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 1053 | 1054 | setprototypeof@1.1.0: 1055 | version "1.1.0" 1056 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 1057 | 1058 | sntp@2.x.x: 1059 | version "2.1.0" 1060 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" 1061 | dependencies: 1062 | hoek "4.x.x" 1063 | 1064 | solc@0.4.19: 1065 | version "0.4.19" 1066 | resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.19.tgz#1af1c4c292a0365a6977d4cbe3fbee7139b4b561" 1067 | dependencies: 1068 | fs-extra "^0.30.0" 1069 | memorystream "^0.3.1" 1070 | require-from-string "^1.1.0" 1071 | semver "^5.3.0" 1072 | yargs "^4.7.1" 1073 | 1074 | spdx-correct@~1.0.0: 1075 | version "1.0.2" 1076 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 1077 | dependencies: 1078 | spdx-license-ids "^1.0.2" 1079 | 1080 | spdx-expression-parse@~1.0.0: 1081 | version "1.0.4" 1082 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 1083 | 1084 | spdx-license-ids@^1.0.2: 1085 | version "1.2.2" 1086 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 1087 | 1088 | sshpk@^1.7.0: 1089 | version "1.13.1" 1090 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 1091 | dependencies: 1092 | asn1 "~0.2.3" 1093 | assert-plus "^1.0.0" 1094 | dashdash "^1.12.0" 1095 | getpass "^0.1.1" 1096 | optionalDependencies: 1097 | bcrypt-pbkdf "^1.0.0" 1098 | ecc-jsbn "~0.1.1" 1099 | jsbn "~0.1.0" 1100 | tweetnacl "~0.14.0" 1101 | 1102 | "statuses@>= 1.3.1 < 2": 1103 | version "1.4.0" 1104 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 1105 | 1106 | statuses@~1.3.1: 1107 | version "1.3.1" 1108 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 1109 | 1110 | string-width@^1.0.1: 1111 | version "1.0.2" 1112 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1113 | dependencies: 1114 | code-point-at "^1.0.0" 1115 | is-fullwidth-code-point "^1.0.0" 1116 | strip-ansi "^3.0.0" 1117 | 1118 | stringstream@~0.0.5: 1119 | version "0.0.5" 1120 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1121 | 1122 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1123 | version "3.0.1" 1124 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1125 | dependencies: 1126 | ansi-regex "^2.0.0" 1127 | 1128 | strip-bom@^2.0.0: 1129 | version "2.0.0" 1130 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1131 | dependencies: 1132 | is-utf8 "^0.2.0" 1133 | 1134 | strip-hex-prefix@1.0.0: 1135 | version "1.0.0" 1136 | resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" 1137 | dependencies: 1138 | is-hex-prefixed "1.0.0" 1139 | 1140 | supports-color@3.1.2: 1141 | version "3.1.2" 1142 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 1143 | dependencies: 1144 | has-flag "^1.0.0" 1145 | 1146 | tough-cookie@~2.3.3: 1147 | version "2.3.3" 1148 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" 1149 | dependencies: 1150 | punycode "^1.4.1" 1151 | 1152 | truffle-blockchain-utils@^0.0.3: 1153 | version "0.0.3" 1154 | resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.3.tgz#ae8a111ec124d96504f0e042c6f205c0b3817e29" 1155 | dependencies: 1156 | web3 "^0.20.1" 1157 | 1158 | truffle-contract-schema@^1.0.0: 1159 | version "1.0.1" 1160 | resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-1.0.1.tgz#08ceaefe71062a8ac9ab881a77a30fda3744176e" 1161 | dependencies: 1162 | ajv "^5.1.1" 1163 | crypto-js "^3.1.9-1" 1164 | 1165 | truffle-contract@^3.0.3: 1166 | version "3.0.3" 1167 | resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-3.0.3.tgz#b14fb318f9a743db8b061046e24978d91f31dbfb" 1168 | dependencies: 1169 | ethjs-abi "0.1.8" 1170 | truffle-blockchain-utils "^0.0.3" 1171 | truffle-contract-schema "^1.0.0" 1172 | truffle-error "0.0.2" 1173 | web3 "^0.20.1" 1174 | 1175 | truffle-error@0.0.2: 1176 | version "0.0.2" 1177 | resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.2.tgz#01b189b78505566ae1689c239c7ca2dd121cfe4c" 1178 | 1179 | truffle@^4.0.6: 1180 | version "4.0.6" 1181 | resolved "https://registry.yarnpkg.com/truffle/-/truffle-4.0.6.tgz#04a23b4c75336f325804d262317f901dbab4f729" 1182 | dependencies: 1183 | mocha "^3.4.2" 1184 | original-require "^1.0.1" 1185 | solc "0.4.19" 1186 | 1187 | tunnel-agent@^0.6.0: 1188 | version "0.6.0" 1189 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1190 | dependencies: 1191 | safe-buffer "^5.0.1" 1192 | 1193 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1194 | version "0.14.5" 1195 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1196 | 1197 | twilio@^3.11.3: 1198 | version "3.11.3" 1199 | resolved "https://registry.yarnpkg.com/twilio/-/twilio-3.11.3.tgz#305c98e63d200c21ef24177109ba5c98094b4543" 1200 | dependencies: 1201 | deprecate "1.0.0" 1202 | jsonwebtoken "^8.1.0" 1203 | lodash "4.0.0" 1204 | moment "2.19.3" 1205 | q "2.0.x" 1206 | request "2.83.x" 1207 | rootpath "0.1.2" 1208 | scmp "0.0.3" 1209 | xmlbuilder "9.0.1" 1210 | 1211 | type-is@~1.6.15: 1212 | version "1.6.16" 1213 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 1214 | dependencies: 1215 | media-typer "0.3.0" 1216 | mime-types "~2.1.18" 1217 | 1218 | unpipe@1.0.0, unpipe@~1.0.0: 1219 | version "1.0.0" 1220 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1221 | 1222 | utf8@^2.1.1: 1223 | version "2.1.2" 1224 | resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96" 1225 | 1226 | utils-merge@1.0.1: 1227 | version "1.0.1" 1228 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1229 | 1230 | uuid@^3.1.0: 1231 | version "3.2.1" 1232 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 1233 | 1234 | validate-npm-package-license@^3.0.1: 1235 | version "3.0.1" 1236 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 1237 | dependencies: 1238 | spdx-correct "~1.0.0" 1239 | spdx-expression-parse "~1.0.0" 1240 | 1241 | vary@~1.1.2: 1242 | version "1.1.2" 1243 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1244 | 1245 | verror@1.10.0: 1246 | version "1.10.0" 1247 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1248 | dependencies: 1249 | assert-plus "^1.0.0" 1250 | core-util-is "1.0.2" 1251 | extsprintf "^1.2.0" 1252 | 1253 | weak-map@^1.0.5: 1254 | version "1.0.5" 1255 | resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb" 1256 | 1257 | web3@^0.20.1: 1258 | version "0.20.5" 1259 | resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.5.tgz#c5048d35f7bf4e2c4c280ce51fbbbc951290b165" 1260 | dependencies: 1261 | bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git" 1262 | crypto-js "^3.1.4" 1263 | utf8 "^2.1.1" 1264 | xhr2 "*" 1265 | xmlhttprequest "*" 1266 | 1267 | which-module@^1.0.0: 1268 | version "1.0.0" 1269 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 1270 | 1271 | window-size@^0.2.0: 1272 | version "0.2.0" 1273 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" 1274 | 1275 | wrap-ansi@^2.0.0: 1276 | version "2.1.0" 1277 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1278 | dependencies: 1279 | string-width "^1.0.1" 1280 | strip-ansi "^3.0.1" 1281 | 1282 | wrappy@1: 1283 | version "1.0.2" 1284 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1285 | 1286 | xhr2@*: 1287 | version "0.1.4" 1288 | resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" 1289 | 1290 | xmlbuilder@9.0.1: 1291 | version "9.0.1" 1292 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.1.tgz#91cd70897755363eba57c12ddeeab4a341a61f65" 1293 | 1294 | xmlhttprequest@*: 1295 | version "1.8.0" 1296 | resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" 1297 | 1298 | xtend@^4.0.1: 1299 | version "4.0.1" 1300 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1301 | 1302 | y18n@^3.2.1: 1303 | version "3.2.1" 1304 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 1305 | 1306 | yargs-parser@^2.4.1: 1307 | version "2.4.1" 1308 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" 1309 | dependencies: 1310 | camelcase "^3.0.0" 1311 | lodash.assign "^4.0.6" 1312 | 1313 | yargs@^4.7.1: 1314 | version "4.8.1" 1315 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" 1316 | dependencies: 1317 | cliui "^3.2.0" 1318 | decamelize "^1.1.1" 1319 | get-caller-file "^1.0.1" 1320 | lodash.assign "^4.0.3" 1321 | os-locale "^1.4.0" 1322 | read-pkg-up "^1.0.1" 1323 | require-directory "^2.1.1" 1324 | require-main-filename "^1.0.1" 1325 | set-blocking "^2.0.0" 1326 | string-width "^1.0.1" 1327 | which-module "^1.0.0" 1328 | window-size "^0.2.0" 1329 | y18n "^3.2.1" 1330 | yargs-parser "^2.4.1" 1331 | -------------------------------------------------------------------------------- /uptime_sla/README.md: -------------------------------------------------------------------------------- 1 | # Uptime Service Level Agreement 2 | 3 | An example SLA that uses ChainLink to determine the release of payment. 4 | 5 | When the contract is deployed a client, service provider, and start time are specified. Additionally a deposit is made. The end of the contract is set to 30 days after the start time. 6 | 7 | After the contract is created anyone can request updates from the oracle for the contract. If the oracle reports that the uptime is below 99.99% then the deposit is released to the client. If the rate is still above 99.99% after the contract ends, and the deposit has not been released, the deposit is sent to the service provider. 8 | 9 | ```solidity 10 | function report(uint256 _requestId, uint256 _rate) 11 | public 12 | onlyOracle 13 | checkRequestId(_requestId) 14 | { 15 | if (_rate < uptimeThreshold) { 16 | client.send(this.balance); 17 | } else if (block.timestamp >= endAt) { 18 | serviceProvider.send(this.balance); 19 | } 20 | } 21 | ``` 22 | 23 | # ChainLink 24 | 25 | Initiator: `runLog` 26 | 27 | Job Pipeline: `httpGet` => `jsonParse` => `multiply` => `ethUint256` => `ethTx` 28 | 29 | This contract displays ChainLinks ability to pull in data from outside data feeds and format it to be used by Ethereum contracts. 30 | 31 | A float value is pulled out of a nested JSON object and multiplied to a precision level that is useful for the contract. 32 | 33 | The ChainLink Job is configured to not take any specific URL or JSON path, so that this oracle and job can be reused for other APIs. Both `url` and `path` are passed into the oracle by the SLA contract, specifically which data point to use is passed into the contract: 34 | ```solidity 35 | function updateUptime(string _when) public { 36 | Chainlink.Run memory run = newRun(jobId, this, "report(uint256,uint256)"); 37 | run.add("url", "https://status.heroku.com/api/ui/availabilities"); 38 | string[] memory path = new string[](4); 39 | path[0] = "data"; 40 | path[1] = _when; //pick which data point in the array you want to examine 41 | path[2] = "attributes"; 42 | path[3] = "calculation"; 43 | run.add("path", path); 44 | requestId = chainlinkRequest(run); 45 | } 46 | ``` 47 | 48 | The API returns the percentage as a float, for example the current value is `0.999999178716033`. The `multiply` adapter takes that result and multiplies it by 1000, which [a parameter specified in the `times` field](https://github.com/smartcontractkit/hello_chainlink/blob/4b42f127ddeca6541ac2aba1803f458d0a3bf460/uptime_sla/http_json_x10000_job.json). The result is `9999`, allowing the contract to check for "four nines" of uptime. 49 | 50 | ## Configure and run [Chainlink development environment](../README.md) 51 | 52 | ## Run and update the Uptime SLA contract. 53 | 54 | 1. Check out this repo and go to folder [hello_chainlink/uptime_sla](https://github.com/smartcontractkit/hello_chainlink/tree/master/uptime_sla). 55 | 2. `yarn install` 56 | 3. `./deploy` in another window 57 | 4. `./send_sla_transaction.js` to trigger an update to the SLA 58 | 5. `./get_uptime.js` get the latest uptime 59 | -------------------------------------------------------------------------------- /uptime_sla/chainlink_deployer.js: -------------------------------------------------------------------------------- 1 | let fs = require("fs"); 2 | let request = require("request"); 3 | let url = "http://chainlink:twochains@localhost:6688/v2/specs"; 4 | 5 | module.exports = { 6 | // Deploys chainlink jobs. 7 | job: function(filename, callback, callbackError) { 8 | fs.readFile(filename, 'utf8', (err, file) => { 9 | let data = JSON.parse(file); 10 | console.log(`Posting to ${url}:\n`, data); 11 | request.post(url, {json: data}, 12 | function (error, response, body) { 13 | if (!error && response && response.statusCode == 200) { 14 | callback(error, response, body); 15 | } else { 16 | if (callbackError) { 17 | callbackError(error, response); 18 | } 19 | } 20 | } 21 | ); 22 | }); 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /uptime_sla/contracts/Migrations.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.17; 2 | 3 | contract Migrations { 4 | address public owner; 5 | uint public last_completed_migration; 6 | 7 | modifier restricted() { 8 | if (msg.sender == owner) _; 9 | } 10 | 11 | function Migrations() public { 12 | owner = msg.sender; 13 | } 14 | 15 | function setCompleted(uint completed) public restricted { 16 | last_completed_migration = completed; 17 | } 18 | 19 | function upgrade(address new_address) public restricted { 20 | Migrations upgraded = Migrations(new_address); 21 | upgraded.setCompleted(last_completed_migration); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /uptime_sla/contracts/UptimeSLA.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.18; 2 | 3 | import "chainlink/solidity/contracts/Chainlinked.sol"; 4 | import "chainlink/solidity/contracts/Chainlink.sol"; 5 | 6 | contract UptimeSLA is Chainlinked { 7 | uint256 constant uptimeThreshold = 9999; 8 | bytes32 private jobId; 9 | uint256 private endAt; 10 | address private client; 11 | address private serviceProvider; 12 | uint256 public requestId; 13 | uint256 public uptime; 14 | 15 | function UptimeSLA( 16 | address _client, 17 | address _serviceProvider, 18 | address _oracle, 19 | bytes32 _jobId 20 | ) public payable { 21 | client = _client; 22 | serviceProvider = _serviceProvider; 23 | endAt = block.timestamp + 30 days; 24 | oracle = Oracle(_oracle); 25 | jobId = _jobId; 26 | } 27 | 28 | function updateUptime(string _when) public { 29 | Chainlink.Run memory run = newRun(jobId, this, "report(uint256,uint256)"); 30 | run.add("url", "https://status.heroku.com/api/ui/availabilities"); 31 | string[] memory path = new string[](4); 32 | path[0] = "data"; 33 | path[1] = _when; 34 | path[2] = "attributes"; 35 | path[3] = "calculation"; 36 | run.add("path", path); 37 | requestId = chainlinkRequest(run); 38 | } 39 | 40 | function report(uint256 _requestId, uint256 _uptime) 41 | public 42 | onlyOracle 43 | checkRequestId(_requestId) 44 | { 45 | uptime = _uptime; 46 | if (_uptime < uptimeThreshold) { 47 | client.send(this.balance); 48 | } else if (block.timestamp >= endAt) { 49 | serviceProvider.send(this.balance); 50 | } 51 | } 52 | 53 | modifier checkRequestId(uint256 _requestId) { 54 | require(requestId == _requestId); 55 | _; 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /uptime_sla/create_http_json_x10000_job: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | curl -u chainlink:twochains -X POST -H 'Content-Type: application/json' \ 4 | -d @./http_json_x10000_job.json http://localhost:6688/v2/specs 5 | -------------------------------------------------------------------------------- /uptime_sla/deploy: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ./node_modules/.bin/truffle migrate --compile-all --reset --network devnet 4 | -------------------------------------------------------------------------------- /uptime_sla/get_uptime.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var Web3 = require('web3'), 4 | contract = require("truffle-contract"), 5 | path = require('path') 6 | UptimeSLAJSON = require(path.join(__dirname, 'build/contracts/UptimeSLA.json')); 7 | 8 | var provider = new Web3.providers.HttpProvider("http://localhost:18545"); 9 | var UptimeSLA = contract(UptimeSLAJSON); 10 | UptimeSLA.setProvider(provider); 11 | 12 | UptimeSLA.deployed().then(function(instance) { 13 | return instance.uptime.call(); 14 | }).then(console.log, console.log); 15 | -------------------------------------------------------------------------------- /uptime_sla/http_json_x10000_job.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "GETs a number from JSON, multiplies by 10,000, and reports uint256", 3 | "initiators": [ 4 | { "type": "runlog"} 5 | ], 6 | "tasks": [ 7 | {"type": "httpGet"}, 8 | {"type": "jsonParse"}, 9 | {"type": "multiply", "times": 10000}, 10 | {"type": "ethuint256"}, 11 | {"type": "ethtx"} 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /uptime_sla/migrations/1_initial_migration.js: -------------------------------------------------------------------------------- 1 | var Migrations = artifacts.require("./Migrations.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Migrations); 5 | }; 6 | -------------------------------------------------------------------------------- /uptime_sla/migrations/2_oracle.js: -------------------------------------------------------------------------------- 1 | let Oracle = artifacts.require("../node_modules/smartcontractkit/chainlink/solidity/contracts/Oracle.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Oracle); 5 | }; 6 | -------------------------------------------------------------------------------- /uptime_sla/migrations/3_uptime_sla.js: -------------------------------------------------------------------------------- 1 | let chainlinkDeployer = require("../chainlink_deployer.js"); 2 | let UptimeSLA = artifacts.require("./UptimeSLA.sol"); 3 | let Oracle = artifacts.require("../node_modules/smartcontractkit/chainlink/solidity/contracts/Oracle.sol"); 4 | 5 | module.exports = function(truffleDeployer) { 6 | let client = "0x542B68aE7029b7212A5223ec2867c6a94703BeE3"; 7 | let serviceProvider = "0xB16E8460cCd76aEC437ca74891D3D358EA7d1d88"; 8 | 9 | chainlinkDeployer.job("http_json_x10000_job.json", function(error, response, body) { 10 | console.log(`Deploying UptimeSLA:`) 11 | console.log(`\tjob: ${body.id}`); 12 | console.log(`\tclient: ${client}`); 13 | console.log(`\tservice provider: ${serviceProvider}`); 14 | 15 | truffleDeployer.deploy(UptimeSLA, client, serviceProvider, Oracle.address, body.id, { 16 | value: 1000000000 17 | }); 18 | }, function(error) { 19 | console.log("chainlink error:", error); 20 | }); 21 | }; 22 | -------------------------------------------------------------------------------- /uptime_sla/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "bignumber.js": "^6.0.0", 4 | "chainlink": "github:smartcontractkit/chainlink", 5 | "fs": "^0.0.1-security", 6 | "moment": "^2.20.1", 7 | "request": "^2.83.0", 8 | "solidity-stringutils": "github:Arachnid/solidity-stringutils", 9 | "truffle": "^4.0.6", 10 | "truffle-contract": "^3.0.3", 11 | "zeppelin-solidity": "github:OpenZeppelin/zeppelin-solidity" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /uptime_sla/send_sla_transaction.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var Web3 = require('web3'), 4 | contract = require("truffle-contract"), 5 | path = require('path') 6 | UptimeSLAJSON = require(path.join(__dirname, 'build/contracts/UptimeSLA.json')); 7 | 8 | var provider = new Web3.providers.HttpProvider("http://localhost:18545"); 9 | var UptimeSLA = contract(UptimeSLAJSON); 10 | UptimeSLA.setProvider(provider); 11 | var devnetAddress = "0x9CA9d2D5E04012C9Ed24C0e513C9bfAa4A2dD77f"; 12 | 13 | UptimeSLA.deployed().then(function(instance) { 14 | return instance.updateUptime("0", {from: devnetAddress}); 15 | }).then(console.log, console.log); 16 | -------------------------------------------------------------------------------- /uptime_sla/test/UptimeSLA_test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | require('./support/helpers.js') 4 | 5 | contract('UptimeSLA', () => { 6 | let Oracle = artifacts.require("../node_modules/smartcontractkit/chainlink/solidity/contracts/Oracle.sol"); 7 | let SLA = artifacts.require("UptimeSLA.sol"); 8 | let jobId = "4c7b7ffb66b344fbaa64995af81e355a"; 9 | let deposit = 1000000000; 10 | let oc, sla, client, serviceProvider, startAt; 11 | 12 | beforeEach(async () => { 13 | client = newAddress() 14 | serviceProvider = newAddress(); 15 | oc = await Oracle.new({from: oracleNode}); 16 | sla = await SLA.new(client, serviceProvider, oc.address, jobId, { 17 | value: deposit 18 | }); 19 | startAt = await getLatestTimestamp(); 20 | }); 21 | 22 | describe("before updates", () => { 23 | it("does not release money to anyone", async () => { 24 | assert.equal(await eth.getBalance(sla.address), deposit); 25 | assert.equal(await eth.getBalance(client), 0); 26 | assert.equal(await eth.getBalance(serviceProvider), 0); 27 | }); 28 | }); 29 | 30 | describe("#updateUptime", () => { 31 | it("triggers a log event in the Oracle contract", async () => { 32 | let tx = await sla.updateUptime("0"); 33 | 34 | let events = await getEvents(oc); 35 | assert.equal(1, events.length) 36 | let event = events[0] 37 | assert.equal(event.args.data, `{"url":"https://status.heroku.com/api/ui/availabilities","path":["data","0","attributes","calculation"]}`) 38 | 39 | assert.equal(web3.toUtf8(event.args.jobId), jobId); 40 | }); 41 | }); 42 | 43 | describe("#fulfillData", () => { 44 | let response = "0x00000000000000000000000000000000000000000000000000000000000f8c4c"; 45 | let requestId; 46 | 47 | beforeEach(async () => { 48 | await sla.updateUptime("0"); 49 | let event = await getLatestEvent(oc); 50 | requestId = event.args.id 51 | }); 52 | 53 | context("when the value is below 9999", async () => { 54 | let response = "0x000000000000000000000000000000000000000000000000000000000000270e"; 55 | 56 | it("sends the deposit to the client", async () => { 57 | await oc.fulfillData(requestId, response, {from: oracleNode}) 58 | 59 | assert.equal(await eth.getBalance(sla.address), 0); 60 | assert.equal(await eth.getBalance(client), deposit); 61 | assert.equal(await eth.getBalance(serviceProvider), 0); 62 | }); 63 | }); 64 | 65 | context("when the value is 9999 or above", () => { 66 | let response = "0x000000000000000000000000000000000000000000000000000000000000270f"; 67 | 68 | it("does not move the money", async () => { 69 | await oc.fulfillData(requestId, response, {from: oracleNode}) 70 | 71 | assert.equal(await eth.getBalance(sla.address), deposit); 72 | assert.equal(await eth.getBalance(client), 0); 73 | assert.equal(await eth.getBalance(serviceProvider), 0); 74 | }); 75 | 76 | context("and a month has passed", () => { 77 | beforeEach(async () => { 78 | await fastForwardTo(startAt + days(30)); 79 | }); 80 | 81 | it("gives the money back to the service provider", async () => { 82 | await oc.fulfillData(requestId, response, {from: oracleNode}) 83 | 84 | assert.equal(await eth.getBalance(sla.address), 0); 85 | assert.equal(await eth.getBalance(client), 0); 86 | assert.equal(await eth.getBalance(serviceProvider), deposit); 87 | }); 88 | }); 89 | }); 90 | 91 | context("when the consumer does not recognize the request ID", () => { 92 | beforeEach(async () => { 93 | await oc.requestData(jobId, sla.address, functionSelector("fulfill(uint256,bytes32)"), ""); 94 | let event = await getLatestEvent(oc); 95 | requestId = event.args.id; 96 | }); 97 | 98 | it("does not accept the data provided", async () => { 99 | let tx = await sla.updateUptime("0"); 100 | 101 | await assertActionThrows(async () => { 102 | await oc.fulfillData(requestId, response, {from: oracleNode}) 103 | }); 104 | }); 105 | }); 106 | 107 | context("when called by anyone other than the oracle contract", () => { 108 | it("does not accept the data provided", async () => { 109 | await assertActionThrows(async () => { 110 | await sla.report(requestId, response, {from: oracleNode}) 111 | }); 112 | }); 113 | }); 114 | }); 115 | }); 116 | -------------------------------------------------------------------------------- /uptime_sla/test/support/helpers.js: -------------------------------------------------------------------------------- 1 | BigNumber = require('bignumber.js'); 2 | moment = require('moment'); 3 | 4 | (() => { 5 | eth = web3.eth; 6 | 7 | before(async function () { 8 | accounts = await eth.accounts; 9 | Accounts = accounts.slice(1); 10 | 11 | oracleNode = Accounts[0]; 12 | stranger = Accounts[1]; 13 | consumer = Accounts[2]; 14 | }); 15 | 16 | Eth = function sendEth(method, params) { 17 | params = params || []; 18 | 19 | return new Promise((resolve, reject) => { 20 | web3.currentProvider.sendAsync({ 21 | jsonrpc: "2.0", 22 | method: method, 23 | params: params || [], 24 | id: new Date().getTime() 25 | }, function sendEthResponse(error, response) { 26 | if (error) { 27 | reject(error); 28 | } else { 29 | resolve(response.result); 30 | }; 31 | }, () => {}, () => {}); 32 | }); 33 | }; 34 | 35 | emptyAddress = '0x0000000000000000000000000000000000000000'; 36 | 37 | sealBlock = async function sealBlock() { 38 | return Eth('evm_mine'); 39 | }; 40 | 41 | sendTransaction = async function sendTransaction(params) { 42 | return await eth.sendTransaction(params); 43 | } 44 | 45 | getBalance = async function getBalance(account) { 46 | return bigNum(await eth.getBalance(account)); 47 | } 48 | 49 | bigNum = function bigNum(number) { 50 | return new BigNumber(number); 51 | } 52 | 53 | toWei = function toWei(number) { 54 | return bigNum(web3.toWei(number)); 55 | } 56 | 57 | tokens = function tokens(number) { 58 | return bigNum(number * 10**18); 59 | } 60 | 61 | intToHex = function intToHex(number) { 62 | return '0x' + bigNum(number).toString(16); 63 | } 64 | 65 | hexToInt = function hexToInt(string) { 66 | return web3.toBigNumber(string); 67 | } 68 | 69 | hexToAddress = function hexToAddress(string) { 70 | return '0x' + string.slice(string.length - 40); 71 | } 72 | 73 | unixTime = function unixTime(time) { 74 | return moment(time).unix(); 75 | } 76 | 77 | seconds = function seconds(number) { 78 | return number; 79 | }; 80 | 81 | minutes = function minutes(number) { 82 | return number * 60; 83 | }; 84 | 85 | hours = function hours(number) { 86 | return number * minutes(60); 87 | }; 88 | 89 | days = function days(number) { 90 | return number * hours(24); 91 | }; 92 | 93 | keccak256 = function keccak256(string) { 94 | return web3.sha3(string); 95 | } 96 | 97 | logTopic = function logTopic(string) { 98 | let hash = keccak256(string); 99 | return '0x' + hash.slice(26); 100 | } 101 | 102 | getLatestBlock = async function getLatestBlock() { 103 | return await eth.getBlock('latest', false); 104 | }; 105 | 106 | getLatestTimestamp = async function getLatestTimestamp () { 107 | let latestBlock = await getLatestBlock() 108 | return web3.toDecimal(latestBlock.timestamp); 109 | }; 110 | 111 | fastForwardTo = async function fastForwardTo(target) { 112 | let now = await getLatestTimestamp(); 113 | assert.isAbove(target, now, "Cannot fast forward to the past"); 114 | let difference = target - now; 115 | await Eth("evm_increaseTime", [difference]); 116 | await sealBlock(); 117 | }; 118 | 119 | getEvents = function getEvents(contract) { 120 | return new Promise((resolve, reject) => { 121 | contract.allEvents().get((error, events) => { 122 | if (error) { 123 | reject(error); 124 | } else { 125 | resolve(events); 126 | }; 127 | }); 128 | }); 129 | }; 130 | 131 | eventsOfType = function eventsOfType(events, type) { 132 | let filteredEvents = []; 133 | for (event of events) { 134 | if (event.event === type) filteredEvents.push(event); 135 | } 136 | return filteredEvents; 137 | }; 138 | 139 | getEventsOfType = async function getEventsOfType(contract, type) { 140 | return eventsOfType(await getEvents(contract), type); 141 | }; 142 | 143 | getLatestEvent = async function getLatestEvent(contract) { 144 | let events = await getEvents(contract); 145 | return events[events.length - 1]; 146 | }; 147 | 148 | assertActionThrows = function assertActionThrows(action) { 149 | return Promise.resolve().then(action) 150 | .catch(error => { 151 | assert(error, "Expected an error to be raised"); 152 | assert(error.message, "Expected an error to be raised"); 153 | return error.message; 154 | }) 155 | .then(errorMessage => { 156 | assert(errorMessage, "Expected an error to be raised"); 157 | invalidOpcode = errorMessage.includes("invalid opcode") 158 | reverted = errorMessage.includes("VM Exception while processing transaction: revert") 159 | assert.isTrue(invalidOpcode || reverted, 'expected error message to include "invalid JUMP" or "revert"'); 160 | // see https://github.com/ethereumjs/testrpc/issues/39 161 | // for why the "invalid JUMP" is the throw related error when using TestRPC 162 | }) 163 | }; 164 | 165 | encodeUint256 = function encodeUint256(int) { 166 | let zeros = "0000000000000000000000000000000000000000000000000000000000000000"; 167 | let payload = int.toString(16); 168 | return (zeros + payload).slice(payload.length); 169 | } 170 | 171 | encodeAddress = function encodeAddress(address) { 172 | return '000000000000000000000000' + address.slice(2); 173 | } 174 | 175 | encodeBytes = function encodeBytes(bytes) { 176 | let zeros = "0000000000000000000000000000000000000000000000000000000000000000"; 177 | let padded = bytes.padEnd(64, 0); 178 | let length = encodeUint256(bytes.length / 2); 179 | return length + padded; 180 | } 181 | 182 | checkPublicABI = function checkPublicABI(contract, expectedPublic) { 183 | let actualPublic = []; 184 | for (method of contract.abi) { 185 | if (method.type == 'function') actualPublic.push(method.name); 186 | }; 187 | 188 | for (method of actualPublic) { 189 | let index = expectedPublic.indexOf(method); 190 | assert.isAtLeast(index, 0, (`#${method} is NOT expected to be public`)) 191 | } 192 | 193 | for (method of expectedPublic) { 194 | let index = actualPublic.indexOf(method); 195 | assert.isAtLeast(index, 0, (`#${method} is expected to be public`)) 196 | } 197 | }; 198 | 199 | functionSelector = function functionSelector(signature) { 200 | return "0x" + web3.sha3(signature).slice(2).slice(0, 8); 201 | }; 202 | 203 | // https://codepen.io/code_monk/pen/FvpfI 204 | randomHex = function randomHex(len) { 205 | var maxlen = 8; 206 | var min = Math.pow(16,Math.min(len,maxlen)-1); 207 | var max = Math.pow(16,Math.min(len,maxlen)) - 1; 208 | var n = Math.floor( Math.random() * (max-min+1) ) + min; 209 | var r = n.toString(16); 210 | while ( r.length < len ) { 211 | r = r + randomHex(len - maxlen); 212 | } 213 | return r; 214 | }; 215 | 216 | newAddress = function newAddress() { 217 | return "0x" + randomHex(40); 218 | }; 219 | 220 | 221 | })(); 222 | -------------------------------------------------------------------------------- /uptime_sla/truffle.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | networks: { 3 | devnet: { 4 | host: "127.0.0.1", 5 | port: 18545, 6 | network_id: "*", 7 | gas: 4700000 8 | } 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /uptime_sla/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ajv@^5.1.0, ajv@^5.1.1: 6 | version "5.5.2" 7 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 8 | dependencies: 9 | co "^4.6.0" 10 | fast-deep-equal "^1.0.0" 11 | fast-json-stable-stringify "^2.0.0" 12 | json-schema-traverse "^0.3.0" 13 | 14 | ansi-regex@^2.0.0: 15 | version "2.1.1" 16 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 17 | 18 | asn1@~0.2.3: 19 | version "0.2.3" 20 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 21 | 22 | assert-plus@1.0.0, assert-plus@^1.0.0: 23 | version "1.0.0" 24 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 25 | 26 | asynckit@^0.4.0: 27 | version "0.4.0" 28 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 29 | 30 | aws-sign2@~0.7.0: 31 | version "0.7.0" 32 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 33 | 34 | aws4@^1.6.0: 35 | version "1.6.0" 36 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 37 | 38 | balanced-match@^1.0.0: 39 | version "1.0.0" 40 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 41 | 42 | bcrypt-pbkdf@^1.0.0: 43 | version "1.0.1" 44 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 45 | dependencies: 46 | tweetnacl "^0.14.3" 47 | 48 | bignumber.js@^6.0.0: 49 | version "6.0.0" 50 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-6.0.0.tgz#bbfa047644609a5af093e9cbd83b0461fa3f6002" 51 | 52 | "bignumber.js@git+https://github.com/frozeman/bignumber.js-nolookahead.git": 53 | version "2.0.7" 54 | resolved "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" 55 | 56 | bn.js@4.11.6: 57 | version "4.11.6" 58 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" 59 | 60 | boom@4.x.x: 61 | version "4.3.1" 62 | resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" 63 | dependencies: 64 | hoek "4.x.x" 65 | 66 | boom@5.x.x: 67 | version "5.2.0" 68 | resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" 69 | dependencies: 70 | hoek "4.x.x" 71 | 72 | brace-expansion@^1.1.7: 73 | version "1.1.11" 74 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 75 | dependencies: 76 | balanced-match "^1.0.0" 77 | concat-map "0.0.1" 78 | 79 | browser-stdout@1.3.0: 80 | version "1.3.0" 81 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 82 | 83 | builtin-modules@^1.0.0: 84 | version "1.1.1" 85 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 86 | 87 | camelcase@^3.0.0: 88 | version "3.0.0" 89 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 90 | 91 | caseless@~0.12.0: 92 | version "0.12.0" 93 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 94 | 95 | "chainlink@github:smartcontractkit/chainlink": 96 | version "0.0.0" 97 | resolved "https://codeload.github.com/smartcontractkit/chainlink/tar.gz/42e8a59a5fe96d2a3603203f7afa55f674c8b54d" 98 | 99 | cliui@^3.2.0: 100 | version "3.2.0" 101 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 102 | dependencies: 103 | string-width "^1.0.1" 104 | strip-ansi "^3.0.1" 105 | wrap-ansi "^2.0.0" 106 | 107 | co@^4.6.0: 108 | version "4.6.0" 109 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 110 | 111 | code-point-at@^1.0.0: 112 | version "1.1.0" 113 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 114 | 115 | combined-stream@1.0.6, combined-stream@~1.0.5: 116 | version "1.0.6" 117 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 118 | dependencies: 119 | delayed-stream "~1.0.0" 120 | 121 | commander@2.9.0: 122 | version "2.9.0" 123 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 124 | dependencies: 125 | graceful-readlink ">= 1.0.0" 126 | 127 | concat-map@0.0.1: 128 | version "0.0.1" 129 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 130 | 131 | core-util-is@1.0.2: 132 | version "1.0.2" 133 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 134 | 135 | cryptiles@3.x.x: 136 | version "3.1.2" 137 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" 138 | dependencies: 139 | boom "5.x.x" 140 | 141 | crypto-js@^3.1.4: 142 | version "3.1.8" 143 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.8.tgz#715f070bf6014f2ae992a98b3929258b713f08d5" 144 | 145 | crypto-js@^3.1.9-1: 146 | version "3.1.9-1" 147 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.9-1.tgz#fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8" 148 | 149 | dashdash@^1.12.0: 150 | version "1.14.1" 151 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 152 | dependencies: 153 | assert-plus "^1.0.0" 154 | 155 | debug@2.6.8: 156 | version "2.6.8" 157 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 158 | dependencies: 159 | ms "2.0.0" 160 | 161 | decamelize@^1.1.1: 162 | version "1.2.0" 163 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 164 | 165 | delayed-stream@~1.0.0: 166 | version "1.0.0" 167 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 168 | 169 | diff@3.2.0: 170 | version "3.2.0" 171 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 172 | 173 | dotenv@^4.0.0: 174 | version "4.0.0" 175 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" 176 | 177 | ecc-jsbn@~0.1.1: 178 | version "0.1.1" 179 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 180 | dependencies: 181 | jsbn "~0.1.0" 182 | 183 | error-ex@^1.2.0: 184 | version "1.3.1" 185 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 186 | dependencies: 187 | is-arrayish "^0.2.1" 188 | 189 | escape-string-regexp@1.0.5: 190 | version "1.0.5" 191 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 192 | 193 | ethjs-abi@0.1.8: 194 | version "0.1.8" 195 | resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.1.8.tgz#cd288583ed628cdfadaf8adefa3ba1dbcbca6c18" 196 | dependencies: 197 | bn.js "4.11.6" 198 | js-sha3 "0.5.5" 199 | number-to-bn "1.7.0" 200 | 201 | ethjs-abi@^0.2.1: 202 | version "0.2.1" 203 | resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.2.1.tgz#e0a7a93a7e81163a94477bad56ede524ab6de533" 204 | dependencies: 205 | bn.js "4.11.6" 206 | js-sha3 "0.5.5" 207 | number-to-bn "1.7.0" 208 | 209 | extend@~3.0.1: 210 | version "3.0.1" 211 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 212 | 213 | extsprintf@1.3.0: 214 | version "1.3.0" 215 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 216 | 217 | extsprintf@^1.2.0: 218 | version "1.4.0" 219 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 220 | 221 | fast-deep-equal@^1.0.0: 222 | version "1.0.0" 223 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" 224 | 225 | fast-json-stable-stringify@^2.0.0: 226 | version "2.0.0" 227 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 228 | 229 | find-up@^1.0.0: 230 | version "1.1.2" 231 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 232 | dependencies: 233 | path-exists "^2.0.0" 234 | pinkie-promise "^2.0.0" 235 | 236 | forever-agent@~0.6.1: 237 | version "0.6.1" 238 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 239 | 240 | form-data@~2.3.1: 241 | version "2.3.2" 242 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 243 | dependencies: 244 | asynckit "^0.4.0" 245 | combined-stream "1.0.6" 246 | mime-types "^2.1.12" 247 | 248 | fs-extra@^0.30.0: 249 | version "0.30.0" 250 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" 251 | dependencies: 252 | graceful-fs "^4.1.2" 253 | jsonfile "^2.1.0" 254 | klaw "^1.0.0" 255 | path-is-absolute "^1.0.0" 256 | rimraf "^2.2.8" 257 | 258 | fs.realpath@^1.0.0: 259 | version "1.0.0" 260 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 261 | 262 | fs@^0.0.1-security: 263 | version "0.0.1-security" 264 | resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4" 265 | 266 | get-caller-file@^1.0.1: 267 | version "1.0.2" 268 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 269 | 270 | getpass@^0.1.1: 271 | version "0.1.7" 272 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 273 | dependencies: 274 | assert-plus "^1.0.0" 275 | 276 | glob@7.1.1: 277 | version "7.1.1" 278 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 279 | dependencies: 280 | fs.realpath "^1.0.0" 281 | inflight "^1.0.4" 282 | inherits "2" 283 | minimatch "^3.0.2" 284 | once "^1.3.0" 285 | path-is-absolute "^1.0.0" 286 | 287 | glob@^7.0.5: 288 | version "7.1.2" 289 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 290 | dependencies: 291 | fs.realpath "^1.0.0" 292 | inflight "^1.0.4" 293 | inherits "2" 294 | minimatch "^3.0.4" 295 | once "^1.3.0" 296 | path-is-absolute "^1.0.0" 297 | 298 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 299 | version "4.1.11" 300 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 301 | 302 | "graceful-readlink@>= 1.0.0": 303 | version "1.0.1" 304 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 305 | 306 | growl@1.9.2: 307 | version "1.9.2" 308 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 309 | 310 | har-schema@^2.0.0: 311 | version "2.0.0" 312 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 313 | 314 | har-validator@~5.0.3: 315 | version "5.0.3" 316 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 317 | dependencies: 318 | ajv "^5.1.0" 319 | har-schema "^2.0.0" 320 | 321 | has-flag@^1.0.0: 322 | version "1.0.0" 323 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 324 | 325 | hawk@~6.0.2: 326 | version "6.0.2" 327 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" 328 | dependencies: 329 | boom "4.x.x" 330 | cryptiles "3.x.x" 331 | hoek "4.x.x" 332 | sntp "2.x.x" 333 | 334 | he@1.1.1: 335 | version "1.1.1" 336 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 337 | 338 | hoek@4.x.x: 339 | version "4.2.1" 340 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" 341 | 342 | hosted-git-info@^2.1.4: 343 | version "2.5.0" 344 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" 345 | 346 | http-signature@~1.2.0: 347 | version "1.2.0" 348 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 349 | dependencies: 350 | assert-plus "^1.0.0" 351 | jsprim "^1.2.2" 352 | sshpk "^1.7.0" 353 | 354 | inflight@^1.0.4: 355 | version "1.0.6" 356 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 357 | dependencies: 358 | once "^1.3.0" 359 | wrappy "1" 360 | 361 | inherits@2: 362 | version "2.0.3" 363 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 364 | 365 | invert-kv@^1.0.0: 366 | version "1.0.0" 367 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 368 | 369 | is-arrayish@^0.2.1: 370 | version "0.2.1" 371 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 372 | 373 | is-builtin-module@^1.0.0: 374 | version "1.0.0" 375 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 376 | dependencies: 377 | builtin-modules "^1.0.0" 378 | 379 | is-fullwidth-code-point@^1.0.0: 380 | version "1.0.0" 381 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 382 | dependencies: 383 | number-is-nan "^1.0.0" 384 | 385 | is-hex-prefixed@1.0.0: 386 | version "1.0.0" 387 | resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" 388 | 389 | is-typedarray@~1.0.0: 390 | version "1.0.0" 391 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 392 | 393 | is-utf8@^0.2.0: 394 | version "0.2.1" 395 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 396 | 397 | isstream@~0.1.2: 398 | version "0.1.2" 399 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 400 | 401 | js-sha3@0.5.5: 402 | version "0.5.5" 403 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" 404 | 405 | jsbn@~0.1.0: 406 | version "0.1.1" 407 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 408 | 409 | json-schema-traverse@^0.3.0: 410 | version "0.3.1" 411 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 412 | 413 | json-schema@0.2.3: 414 | version "0.2.3" 415 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 416 | 417 | json-stringify-safe@~5.0.1: 418 | version "5.0.1" 419 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 420 | 421 | json3@3.3.2: 422 | version "3.3.2" 423 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 424 | 425 | jsonfile@^2.1.0: 426 | version "2.4.0" 427 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 428 | optionalDependencies: 429 | graceful-fs "^4.1.6" 430 | 431 | jsprim@^1.2.2: 432 | version "1.4.1" 433 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 434 | dependencies: 435 | assert-plus "1.0.0" 436 | extsprintf "1.3.0" 437 | json-schema "0.2.3" 438 | verror "1.10.0" 439 | 440 | klaw@^1.0.0: 441 | version "1.3.1" 442 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 443 | optionalDependencies: 444 | graceful-fs "^4.1.9" 445 | 446 | lcid@^1.0.0: 447 | version "1.0.0" 448 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 449 | dependencies: 450 | invert-kv "^1.0.0" 451 | 452 | load-json-file@^1.0.0: 453 | version "1.1.0" 454 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 455 | dependencies: 456 | graceful-fs "^4.1.2" 457 | parse-json "^2.2.0" 458 | pify "^2.0.0" 459 | pinkie-promise "^2.0.0" 460 | strip-bom "^2.0.0" 461 | 462 | lodash._baseassign@^3.0.0: 463 | version "3.2.0" 464 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 465 | dependencies: 466 | lodash._basecopy "^3.0.0" 467 | lodash.keys "^3.0.0" 468 | 469 | lodash._basecopy@^3.0.0: 470 | version "3.0.1" 471 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 472 | 473 | lodash._basecreate@^3.0.0: 474 | version "3.0.3" 475 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 476 | 477 | lodash._getnative@^3.0.0: 478 | version "3.9.1" 479 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 480 | 481 | lodash._isiterateecall@^3.0.0: 482 | version "3.0.9" 483 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 484 | 485 | lodash.assign@^4.0.3, lodash.assign@^4.0.6: 486 | version "4.2.0" 487 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 488 | 489 | lodash.create@3.1.1: 490 | version "3.1.1" 491 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 492 | dependencies: 493 | lodash._baseassign "^3.0.0" 494 | lodash._basecreate "^3.0.0" 495 | lodash._isiterateecall "^3.0.0" 496 | 497 | lodash.isarguments@^3.0.0: 498 | version "3.1.0" 499 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 500 | 501 | lodash.isarray@^3.0.0: 502 | version "3.0.4" 503 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 504 | 505 | lodash.keys@^3.0.0: 506 | version "3.1.2" 507 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 508 | dependencies: 509 | lodash._getnative "^3.0.0" 510 | lodash.isarguments "^3.0.0" 511 | lodash.isarray "^3.0.0" 512 | 513 | memorystream@^0.3.1: 514 | version "0.3.1" 515 | resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" 516 | 517 | mime-db@~1.33.0: 518 | version "1.33.0" 519 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 520 | 521 | mime-types@^2.1.12, mime-types@~2.1.17: 522 | version "2.1.18" 523 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 524 | dependencies: 525 | mime-db "~1.33.0" 526 | 527 | minimatch@^3.0.2, minimatch@^3.0.4: 528 | version "3.0.4" 529 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 530 | dependencies: 531 | brace-expansion "^1.1.7" 532 | 533 | minimist@0.0.8: 534 | version "0.0.8" 535 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 536 | 537 | mkdirp@0.5.1: 538 | version "0.5.1" 539 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 540 | dependencies: 541 | minimist "0.0.8" 542 | 543 | mocha@^3.4.2: 544 | version "3.5.3" 545 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" 546 | dependencies: 547 | browser-stdout "1.3.0" 548 | commander "2.9.0" 549 | debug "2.6.8" 550 | diff "3.2.0" 551 | escape-string-regexp "1.0.5" 552 | glob "7.1.1" 553 | growl "1.9.2" 554 | he "1.1.1" 555 | json3 "3.3.2" 556 | lodash.create "3.1.1" 557 | mkdirp "0.5.1" 558 | supports-color "3.1.2" 559 | 560 | moment@^2.20.1: 561 | version "2.20.1" 562 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" 563 | 564 | ms@2.0.0: 565 | version "2.0.0" 566 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 567 | 568 | normalize-package-data@^2.3.2: 569 | version "2.4.0" 570 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 571 | dependencies: 572 | hosted-git-info "^2.1.4" 573 | is-builtin-module "^1.0.0" 574 | semver "2 || 3 || 4 || 5" 575 | validate-npm-package-license "^3.0.1" 576 | 577 | number-is-nan@^1.0.0: 578 | version "1.0.1" 579 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 580 | 581 | number-to-bn@1.7.0: 582 | version "1.7.0" 583 | resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" 584 | dependencies: 585 | bn.js "4.11.6" 586 | strip-hex-prefix "1.0.0" 587 | 588 | oauth-sign@~0.8.2: 589 | version "0.8.2" 590 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 591 | 592 | once@^1.3.0: 593 | version "1.4.0" 594 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 595 | dependencies: 596 | wrappy "1" 597 | 598 | original-require@^1.0.1: 599 | version "1.0.1" 600 | resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" 601 | 602 | os-locale@^1.4.0: 603 | version "1.4.0" 604 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 605 | dependencies: 606 | lcid "^1.0.0" 607 | 608 | parse-json@^2.2.0: 609 | version "2.2.0" 610 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 611 | dependencies: 612 | error-ex "^1.2.0" 613 | 614 | path-exists@^2.0.0: 615 | version "2.1.0" 616 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 617 | dependencies: 618 | pinkie-promise "^2.0.0" 619 | 620 | path-is-absolute@^1.0.0: 621 | version "1.0.1" 622 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 623 | 624 | path-type@^1.0.0: 625 | version "1.1.0" 626 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 627 | dependencies: 628 | graceful-fs "^4.1.2" 629 | pify "^2.0.0" 630 | pinkie-promise "^2.0.0" 631 | 632 | performance-now@^2.1.0: 633 | version "2.1.0" 634 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 635 | 636 | pify@^2.0.0: 637 | version "2.3.0" 638 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 639 | 640 | pinkie-promise@^2.0.0: 641 | version "2.0.1" 642 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 643 | dependencies: 644 | pinkie "^2.0.0" 645 | 646 | pinkie@^2.0.0: 647 | version "2.0.4" 648 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 649 | 650 | punycode@^1.4.1: 651 | version "1.4.1" 652 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 653 | 654 | qs@~6.5.1: 655 | version "6.5.1" 656 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 657 | 658 | read-pkg-up@^1.0.1: 659 | version "1.0.1" 660 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 661 | dependencies: 662 | find-up "^1.0.0" 663 | read-pkg "^1.0.0" 664 | 665 | read-pkg@^1.0.0: 666 | version "1.1.0" 667 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 668 | dependencies: 669 | load-json-file "^1.0.0" 670 | normalize-package-data "^2.3.2" 671 | path-type "^1.0.0" 672 | 673 | request@^2.83.0: 674 | version "2.83.0" 675 | resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" 676 | dependencies: 677 | aws-sign2 "~0.7.0" 678 | aws4 "^1.6.0" 679 | caseless "~0.12.0" 680 | combined-stream "~1.0.5" 681 | extend "~3.0.1" 682 | forever-agent "~0.6.1" 683 | form-data "~2.3.1" 684 | har-validator "~5.0.3" 685 | hawk "~6.0.2" 686 | http-signature "~1.2.0" 687 | is-typedarray "~1.0.0" 688 | isstream "~0.1.2" 689 | json-stringify-safe "~5.0.1" 690 | mime-types "~2.1.17" 691 | oauth-sign "~0.8.2" 692 | performance-now "^2.1.0" 693 | qs "~6.5.1" 694 | safe-buffer "^5.1.1" 695 | stringstream "~0.0.5" 696 | tough-cookie "~2.3.3" 697 | tunnel-agent "^0.6.0" 698 | uuid "^3.1.0" 699 | 700 | require-directory@^2.1.1: 701 | version "2.1.1" 702 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 703 | 704 | require-from-string@^1.1.0: 705 | version "1.2.1" 706 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" 707 | 708 | require-main-filename@^1.0.1: 709 | version "1.0.1" 710 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 711 | 712 | rimraf@^2.2.8: 713 | version "2.6.2" 714 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 715 | dependencies: 716 | glob "^7.0.5" 717 | 718 | safe-buffer@^5.0.1, safe-buffer@^5.1.1: 719 | version "5.1.1" 720 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 721 | 722 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: 723 | version "5.5.0" 724 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 725 | 726 | set-blocking@^2.0.0: 727 | version "2.0.0" 728 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 729 | 730 | sntp@2.x.x: 731 | version "2.1.0" 732 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" 733 | dependencies: 734 | hoek "4.x.x" 735 | 736 | solc@0.4.19: 737 | version "0.4.19" 738 | resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.19.tgz#1af1c4c292a0365a6977d4cbe3fbee7139b4b561" 739 | dependencies: 740 | fs-extra "^0.30.0" 741 | memorystream "^0.3.1" 742 | require-from-string "^1.1.0" 743 | semver "^5.3.0" 744 | yargs "^4.7.1" 745 | 746 | "solidity-stringutils@github:Arachnid/solidity-stringutils": 747 | version "0.0.0" 748 | resolved "https://codeload.github.com/Arachnid/solidity-stringutils/tar.gz/4c36b494ded3661fdd2210b56fd6acc27d9a8d2a" 749 | 750 | spdx-correct@~1.0.0: 751 | version "1.0.2" 752 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 753 | dependencies: 754 | spdx-license-ids "^1.0.2" 755 | 756 | spdx-expression-parse@~1.0.0: 757 | version "1.0.4" 758 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 759 | 760 | spdx-license-ids@^1.0.2: 761 | version "1.2.2" 762 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 763 | 764 | sshpk@^1.7.0: 765 | version "1.13.1" 766 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 767 | dependencies: 768 | asn1 "~0.2.3" 769 | assert-plus "^1.0.0" 770 | dashdash "^1.12.0" 771 | getpass "^0.1.1" 772 | optionalDependencies: 773 | bcrypt-pbkdf "^1.0.0" 774 | ecc-jsbn "~0.1.1" 775 | jsbn "~0.1.0" 776 | tweetnacl "~0.14.0" 777 | 778 | string-width@^1.0.1: 779 | version "1.0.2" 780 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 781 | dependencies: 782 | code-point-at "^1.0.0" 783 | is-fullwidth-code-point "^1.0.0" 784 | strip-ansi "^3.0.0" 785 | 786 | stringstream@~0.0.5: 787 | version "0.0.5" 788 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 789 | 790 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 791 | version "3.0.1" 792 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 793 | dependencies: 794 | ansi-regex "^2.0.0" 795 | 796 | strip-bom@^2.0.0: 797 | version "2.0.0" 798 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 799 | dependencies: 800 | is-utf8 "^0.2.0" 801 | 802 | strip-hex-prefix@1.0.0: 803 | version "1.0.0" 804 | resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" 805 | dependencies: 806 | is-hex-prefixed "1.0.0" 807 | 808 | supports-color@3.1.2: 809 | version "3.1.2" 810 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 811 | dependencies: 812 | has-flag "^1.0.0" 813 | 814 | tough-cookie@~2.3.3: 815 | version "2.3.3" 816 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" 817 | dependencies: 818 | punycode "^1.4.1" 819 | 820 | truffle-blockchain-utils@^0.0.3: 821 | version "0.0.3" 822 | resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.3.tgz#ae8a111ec124d96504f0e042c6f205c0b3817e29" 823 | dependencies: 824 | web3 "^0.20.1" 825 | 826 | truffle-contract-schema@^1.0.0: 827 | version "1.0.1" 828 | resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-1.0.1.tgz#08ceaefe71062a8ac9ab881a77a30fda3744176e" 829 | dependencies: 830 | ajv "^5.1.1" 831 | crypto-js "^3.1.9-1" 832 | 833 | truffle-contract@^3.0.3: 834 | version "3.0.3" 835 | resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-3.0.3.tgz#b14fb318f9a743db8b061046e24978d91f31dbfb" 836 | dependencies: 837 | ethjs-abi "0.1.8" 838 | truffle-blockchain-utils "^0.0.3" 839 | truffle-contract-schema "^1.0.0" 840 | truffle-error "0.0.2" 841 | web3 "^0.20.1" 842 | 843 | truffle-error@0.0.2: 844 | version "0.0.2" 845 | resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.2.tgz#01b189b78505566ae1689c239c7ca2dd121cfe4c" 846 | 847 | truffle@^4.0.6: 848 | version "4.0.6" 849 | resolved "https://registry.yarnpkg.com/truffle/-/truffle-4.0.6.tgz#04a23b4c75336f325804d262317f901dbab4f729" 850 | dependencies: 851 | mocha "^3.4.2" 852 | original-require "^1.0.1" 853 | solc "0.4.19" 854 | 855 | tunnel-agent@^0.6.0: 856 | version "0.6.0" 857 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 858 | dependencies: 859 | safe-buffer "^5.0.1" 860 | 861 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 862 | version "0.14.5" 863 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 864 | 865 | utf8@^2.1.1: 866 | version "2.1.2" 867 | resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96" 868 | 869 | uuid@^3.1.0: 870 | version "3.2.1" 871 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 872 | 873 | validate-npm-package-license@^3.0.1: 874 | version "3.0.1" 875 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 876 | dependencies: 877 | spdx-correct "~1.0.0" 878 | spdx-expression-parse "~1.0.0" 879 | 880 | verror@1.10.0: 881 | version "1.10.0" 882 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 883 | dependencies: 884 | assert-plus "^1.0.0" 885 | core-util-is "1.0.2" 886 | extsprintf "^1.2.0" 887 | 888 | web3@^0.20.1: 889 | version "0.20.5" 890 | resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.5.tgz#c5048d35f7bf4e2c4c280ce51fbbbc951290b165" 891 | dependencies: 892 | bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git" 893 | crypto-js "^3.1.4" 894 | utf8 "^2.1.1" 895 | xhr2 "*" 896 | xmlhttprequest "*" 897 | 898 | which-module@^1.0.0: 899 | version "1.0.0" 900 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 901 | 902 | window-size@^0.2.0: 903 | version "0.2.0" 904 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" 905 | 906 | wrap-ansi@^2.0.0: 907 | version "2.1.0" 908 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 909 | dependencies: 910 | string-width "^1.0.1" 911 | strip-ansi "^3.0.1" 912 | 913 | wrappy@1: 914 | version "1.0.2" 915 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 916 | 917 | xhr2@*: 918 | version "0.1.4" 919 | resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" 920 | 921 | xmlhttprequest@*: 922 | version "1.8.0" 923 | resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" 924 | 925 | y18n@^3.2.1: 926 | version "3.2.1" 927 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 928 | 929 | yargs-parser@^2.4.1: 930 | version "2.4.1" 931 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" 932 | dependencies: 933 | camelcase "^3.0.0" 934 | lodash.assign "^4.0.6" 935 | 936 | yargs@^4.7.1: 937 | version "4.8.1" 938 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" 939 | dependencies: 940 | cliui "^3.2.0" 941 | decamelize "^1.1.1" 942 | get-caller-file "^1.0.1" 943 | lodash.assign "^4.0.3" 944 | os-locale "^1.4.0" 945 | read-pkg-up "^1.0.1" 946 | require-directory "^2.1.1" 947 | require-main-filename "^1.0.1" 948 | set-blocking "^2.0.0" 949 | string-width "^1.0.1" 950 | which-module "^1.0.0" 951 | window-size "^0.2.0" 952 | y18n "^3.2.1" 953 | yargs-parser "^2.4.1" 954 | 955 | "zeppelin-solidity@github:OpenZeppelin/zeppelin-solidity": 956 | version "1.6.0" 957 | resolved "https://codeload.github.com/OpenZeppelin/zeppelin-solidity/tar.gz/108d5f3b4a70aae48ee6666123dab2d4046ffbeb" 958 | dependencies: 959 | dotenv "^4.0.0" 960 | ethjs-abi "^0.2.1" 961 | --------------------------------------------------------------------------------