├── README.md ├── build └── contracts │ ├── FundRaise.json │ └── Migrations.json ├── contracts ├── FundRaise.sol └── Migrations.sol ├── migrations ├── 1_initial_migration.js └── 2_deploy_contracts.js ├── package-lock.json ├── package.json ├── test └── fundRaise.js └── truffle.js /README.md: -------------------------------------------------------------------------------- 1 | ## Testing Smart Contracts With JavaScript Example 2 | 3 | This is the code for this blog post [https://medium.com/@gus_tavo_guim/testing-your-smart-contracts-with-javascript-40d4edc2abed](https://medium.com/@gus_tavo_guim/testing-your-smart-contracts-with-javascript-40d4edc2abed). 4 | -------------------------------------------------------------------------------- /build/contracts/FundRaise.json: -------------------------------------------------------------------------------- 1 | { 2 | "contractName": "FundRaise", 3 | "abi": [ 4 | { 5 | "constant": false, 6 | "inputs": [], 7 | "name": "unpause", 8 | "outputs": [], 9 | "payable": false, 10 | "stateMutability": "nonpayable", 11 | "type": "function" 12 | }, 13 | { 14 | "constant": false, 15 | "inputs": [], 16 | "name": "pause", 17 | "outputs": [], 18 | "payable": false, 19 | "stateMutability": "nonpayable", 20 | "type": "function" 21 | }, 22 | { 23 | "constant": true, 24 | "inputs": [], 25 | "name": "owner", 26 | "outputs": [ 27 | { 28 | "name": "", 29 | "type": "address" 30 | } 31 | ], 32 | "payable": false, 33 | "stateMutability": "view", 34 | "type": "function" 35 | }, 36 | { 37 | "constant": false, 38 | "inputs": [], 39 | "name": "removeFunds", 40 | "outputs": [], 41 | "payable": false, 42 | "stateMutability": "nonpayable", 43 | "type": "function" 44 | }, 45 | { 46 | "inputs": [], 47 | "payable": false, 48 | "stateMutability": "nonpayable", 49 | "type": "constructor" 50 | }, 51 | { 52 | "payable": true, 53 | "stateMutability": "payable", 54 | "type": "fallback" 55 | } 56 | ], 57 | "bytecode": "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a031990911617905561022f8061003b6000396000f3006060604052361561005f5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633f4ba83a81146100895780638456cb591461009c5780638da5cb5b146100af578063feac51f5146100eb575b60005474010000000000000000000000000000000000000000900460ff161561008757600080fd5b005b341561009457600080fd5b6100876100fe565b34156100a757600080fd5b610087610143565b34156100ba57600080fd5b6100c261019f565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34156100f657600080fd5b6100876101bb565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161461012357fe5b6000805474ff000000000000000000000000000000000000000019169055565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161461016857fe5b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff9081169030163180156108fc0290604051600060405180830381858888f19350505050151561020157600080fd5b5600a165627a7a7230582054b5907cdde1dbbe26aff78d413c6201108f2fcc14cc11fd2df45907e7ac498d0029", 58 | "deployedBytecode": "0x6060604052361561005f5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633f4ba83a81146100895780638456cb591461009c5780638da5cb5b146100af578063feac51f5146100eb575b60005474010000000000000000000000000000000000000000900460ff161561008757600080fd5b005b341561009457600080fd5b6100876100fe565b34156100a757600080fd5b610087610143565b34156100ba57600080fd5b6100c261019f565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34156100f657600080fd5b6100876101bb565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161461012357fe5b6000805474ff000000000000000000000000000000000000000019169055565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161461016857fe5b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff9081169030163180156108fc0290604051600060405180830381858888f19350505050151561020157600080fd5b5600a165627a7a7230582054b5907cdde1dbbe26aff78d413c6201108f2fcc14cc11fd2df45907e7ac498d0029", 59 | "sourceMap": "26:679:0:-;;;322:56;;;;;;;;353:5;:18;;-1:-1:-1;;;;;361:10:0;353:18;-1:-1:-1;;;;;;353:18:0;;;;;;26:679;;;;;;", 60 | "deployedSourceMap": "26:679:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;237:6;;;;;;;236:7;228:16;;;;;;26:679;555:67;;;;;;;;;;;;485:64;;;;;;;;;;;;51:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;628:75;;;;;;;;;;;;555:67;150:5;;159:10;150:19;;;;:5;;:19;143:27;;;;610:5;601:14;;-1:-1:-1;;601:14:0;;;555:67::o;485:64::-;150:5;;159:10;150:19;;;;:5;;:19;143:27;;;;529:6;:13;;-1:-1:-1;;529:13:0;;;;;485:64::o;51:20::-;;;;;;:::o;628:75::-;668:5;;;;;;;683:4;:12;;668:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;628:75::o", 61 | "source": "pragma solidity ^0.4.17;\n\ncontract FundRaise {\n address public owner;\n bool paused;\n\n // modifiers\n modifier onlyOwner() {\n assert(owner == msg.sender);\n _;\n }\n\n modifier whenNotPaused(){\n require(!paused);\n _;\n }\n\n // @dev constructor function. Sets contract owner\n function FundRaise() {\n owner = msg.sender;\n }\n\n // fallback function to accept ETH into contract.\n function () whenNotPaused payable {\n }\n\n function pause() public onlyOwner {\n paused = true;\n }\n\n function unpause() public onlyOwner {\n paused = false;\n }\n\n function removeFunds() public {\n owner.transfer(this.balance);\n }\n}\n", 62 | "sourcePath": "/Users/gustavoguimaraes/DAPPS/smart-contract-test-example/contracts/FundRaise.sol", 63 | "ast": { 64 | "attributes": { 65 | "absolutePath": "/Users/gustavoguimaraes/DAPPS/smart-contract-test-example/contracts/FundRaise.sol", 66 | "exportedSymbols": { 67 | "FundRaise": [ 68 | 72 69 | ] 70 | } 71 | }, 72 | "children": [ 73 | { 74 | "attributes": { 75 | "literals": [ 76 | "solidity", 77 | "^", 78 | "0.4", 79 | ".17" 80 | ] 81 | }, 82 | "id": 1, 83 | "name": "PragmaDirective", 84 | "src": "0:24:0" 85 | }, 86 | { 87 | "attributes": { 88 | "baseContracts": [ 89 | null 90 | ], 91 | "contractDependencies": [ 92 | null 93 | ], 94 | "contractKind": "contract", 95 | "documentation": null, 96 | "fullyImplemented": true, 97 | "linearizedBaseContracts": [ 98 | 72 99 | ], 100 | "name": "FundRaise", 101 | "scope": 73 102 | }, 103 | "children": [ 104 | { 105 | "attributes": { 106 | "constant": false, 107 | "name": "owner", 108 | "scope": 72, 109 | "stateVariable": true, 110 | "storageLocation": "default", 111 | "type": "address", 112 | "value": null, 113 | "visibility": "public" 114 | }, 115 | "children": [ 116 | { 117 | "attributes": { 118 | "name": "address", 119 | "type": "address" 120 | }, 121 | "id": 2, 122 | "name": "ElementaryTypeName", 123 | "src": "51:7:0" 124 | } 125 | ], 126 | "id": 3, 127 | "name": "VariableDeclaration", 128 | "src": "51:20:0" 129 | }, 130 | { 131 | "attributes": { 132 | "constant": false, 133 | "name": "paused", 134 | "scope": 72, 135 | "stateVariable": true, 136 | "storageLocation": "default", 137 | "type": "bool", 138 | "value": null, 139 | "visibility": "internal" 140 | }, 141 | "children": [ 142 | { 143 | "attributes": { 144 | "name": "bool", 145 | "type": "bool" 146 | }, 147 | "id": 4, 148 | "name": "ElementaryTypeName", 149 | "src": "77:4:0" 150 | } 151 | ], 152 | "id": 5, 153 | "name": "VariableDeclaration", 154 | "src": "77:11:0" 155 | }, 156 | { 157 | "attributes": { 158 | "name": "onlyOwner", 159 | "visibility": "internal" 160 | }, 161 | "children": [ 162 | { 163 | "attributes": { 164 | "parameters": [ 165 | null 166 | ] 167 | }, 168 | "children": [], 169 | "id": 6, 170 | "name": "ParameterList", 171 | "src": "130:2:0" 172 | }, 173 | { 174 | "children": [ 175 | { 176 | "children": [ 177 | { 178 | "attributes": { 179 | "argumentTypes": null, 180 | "isConstant": false, 181 | "isLValue": false, 182 | "isPure": false, 183 | "isStructConstructorCall": false, 184 | "lValueRequested": false, 185 | "names": [ 186 | null 187 | ], 188 | "type": "tuple()", 189 | "type_conversion": false 190 | }, 191 | "children": [ 192 | { 193 | "attributes": { 194 | "argumentTypes": [ 195 | { 196 | "typeIdentifier": "t_bool", 197 | "typeString": "bool" 198 | } 199 | ], 200 | "overloadedDeclarations": [ 201 | null 202 | ], 203 | "referencedDeclaration": 149, 204 | "type": "function (bool) pure", 205 | "value": "assert" 206 | }, 207 | "id": 7, 208 | "name": "Identifier", 209 | "src": "143:6:0" 210 | }, 211 | { 212 | "attributes": { 213 | "argumentTypes": null, 214 | "commonType": { 215 | "typeIdentifier": "t_address", 216 | "typeString": "address" 217 | }, 218 | "isConstant": false, 219 | "isLValue": false, 220 | "isPure": false, 221 | "lValueRequested": false, 222 | "operator": "==", 223 | "type": "bool" 224 | }, 225 | "children": [ 226 | { 227 | "attributes": { 228 | "argumentTypes": null, 229 | "overloadedDeclarations": [ 230 | null 231 | ], 232 | "referencedDeclaration": 3, 233 | "type": "address", 234 | "value": "owner" 235 | }, 236 | "id": 8, 237 | "name": "Identifier", 238 | "src": "150:5:0" 239 | }, 240 | { 241 | "attributes": { 242 | "argumentTypes": null, 243 | "isConstant": false, 244 | "isLValue": false, 245 | "isPure": false, 246 | "lValueRequested": false, 247 | "member_name": "sender", 248 | "referencedDeclaration": null, 249 | "type": "address" 250 | }, 251 | "children": [ 252 | { 253 | "attributes": { 254 | "argumentTypes": null, 255 | "overloadedDeclarations": [ 256 | null 257 | ], 258 | "referencedDeclaration": 132, 259 | "type": "msg", 260 | "value": "msg" 261 | }, 262 | "id": 9, 263 | "name": "Identifier", 264 | "src": "159:3:0" 265 | } 266 | ], 267 | "id": 10, 268 | "name": "MemberAccess", 269 | "src": "159:10:0" 270 | } 271 | ], 272 | "id": 11, 273 | "name": "BinaryOperation", 274 | "src": "150:19:0" 275 | } 276 | ], 277 | "id": 12, 278 | "name": "FunctionCall", 279 | "src": "143:27:0" 280 | } 281 | ], 282 | "id": 13, 283 | "name": "ExpressionStatement", 284 | "src": "143:27:0" 285 | }, 286 | { 287 | "id": 14, 288 | "name": "PlaceholderStatement", 289 | "src": "180:1:0" 290 | } 291 | ], 292 | "id": 15, 293 | "name": "Block", 294 | "src": "133:55:0" 295 | } 296 | ], 297 | "id": 16, 298 | "name": "ModifierDefinition", 299 | "src": "112:76:0" 300 | }, 301 | { 302 | "attributes": { 303 | "name": "whenNotPaused", 304 | "visibility": "internal" 305 | }, 306 | "children": [ 307 | { 308 | "attributes": { 309 | "parameters": [ 310 | null 311 | ] 312 | }, 313 | "children": [], 314 | "id": 17, 315 | "name": "ParameterList", 316 | "src": "216:2:0" 317 | }, 318 | { 319 | "children": [ 320 | { 321 | "children": [ 322 | { 323 | "attributes": { 324 | "argumentTypes": null, 325 | "isConstant": false, 326 | "isLValue": false, 327 | "isPure": false, 328 | "isStructConstructorCall": false, 329 | "lValueRequested": false, 330 | "names": [ 331 | null 332 | ], 333 | "type": "tuple()", 334 | "type_conversion": false 335 | }, 336 | "children": [ 337 | { 338 | "attributes": { 339 | "argumentTypes": [ 340 | { 341 | "typeIdentifier": "t_bool", 342 | "typeString": "bool" 343 | } 344 | ], 345 | "overloadedDeclarations": [ 346 | null 347 | ], 348 | "referencedDeclaration": 150, 349 | "type": "function (bool) pure", 350 | "value": "require" 351 | }, 352 | "id": 18, 353 | "name": "Identifier", 354 | "src": "228:7:0" 355 | }, 356 | { 357 | "attributes": { 358 | "argumentTypes": null, 359 | "isConstant": false, 360 | "isLValue": false, 361 | "isPure": false, 362 | "lValueRequested": false, 363 | "operator": "!", 364 | "prefix": true, 365 | "type": "bool" 366 | }, 367 | "children": [ 368 | { 369 | "attributes": { 370 | "argumentTypes": null, 371 | "overloadedDeclarations": [ 372 | null 373 | ], 374 | "referencedDeclaration": 5, 375 | "type": "bool", 376 | "value": "paused" 377 | }, 378 | "id": 19, 379 | "name": "Identifier", 380 | "src": "237:6:0" 381 | } 382 | ], 383 | "id": 20, 384 | "name": "UnaryOperation", 385 | "src": "236:7:0" 386 | } 387 | ], 388 | "id": 21, 389 | "name": "FunctionCall", 390 | "src": "228:16:0" 391 | } 392 | ], 393 | "id": 22, 394 | "name": "ExpressionStatement", 395 | "src": "228:16:0" 396 | }, 397 | { 398 | "id": 23, 399 | "name": "PlaceholderStatement", 400 | "src": "254:1:0" 401 | } 402 | ], 403 | "id": 24, 404 | "name": "Block", 405 | "src": "218:44:0" 406 | } 407 | ], 408 | "id": 25, 409 | "name": "ModifierDefinition", 410 | "src": "194:68:0" 411 | }, 412 | { 413 | "attributes": { 414 | "constant": false, 415 | "implemented": true, 416 | "isConstructor": true, 417 | "modifiers": [ 418 | null 419 | ], 420 | "name": "FundRaise", 421 | "payable": false, 422 | "scope": 72, 423 | "stateMutability": "nonpayable", 424 | "superFunction": null, 425 | "visibility": "public" 426 | }, 427 | "children": [ 428 | { 429 | "attributes": { 430 | "parameters": [ 431 | null 432 | ] 433 | }, 434 | "children": [], 435 | "id": 26, 436 | "name": "ParameterList", 437 | "src": "340:2:0" 438 | }, 439 | { 440 | "attributes": { 441 | "parameters": [ 442 | null 443 | ] 444 | }, 445 | "children": [], 446 | "id": 27, 447 | "name": "ParameterList", 448 | "src": "343:0:0" 449 | }, 450 | { 451 | "children": [ 452 | { 453 | "children": [ 454 | { 455 | "attributes": { 456 | "argumentTypes": null, 457 | "isConstant": false, 458 | "isLValue": false, 459 | "isPure": false, 460 | "lValueRequested": false, 461 | "operator": "=", 462 | "type": "address" 463 | }, 464 | "children": [ 465 | { 466 | "attributes": { 467 | "argumentTypes": null, 468 | "overloadedDeclarations": [ 469 | null 470 | ], 471 | "referencedDeclaration": 3, 472 | "type": "address", 473 | "value": "owner" 474 | }, 475 | "id": 28, 476 | "name": "Identifier", 477 | "src": "353:5:0" 478 | }, 479 | { 480 | "attributes": { 481 | "argumentTypes": null, 482 | "isConstant": false, 483 | "isLValue": false, 484 | "isPure": false, 485 | "lValueRequested": false, 486 | "member_name": "sender", 487 | "referencedDeclaration": null, 488 | "type": "address" 489 | }, 490 | "children": [ 491 | { 492 | "attributes": { 493 | "argumentTypes": null, 494 | "overloadedDeclarations": [ 495 | null 496 | ], 497 | "referencedDeclaration": 132, 498 | "type": "msg", 499 | "value": "msg" 500 | }, 501 | "id": 29, 502 | "name": "Identifier", 503 | "src": "361:3:0" 504 | } 505 | ], 506 | "id": 30, 507 | "name": "MemberAccess", 508 | "src": "361:10:0" 509 | } 510 | ], 511 | "id": 31, 512 | "name": "Assignment", 513 | "src": "353:18:0" 514 | } 515 | ], 516 | "id": 32, 517 | "name": "ExpressionStatement", 518 | "src": "353:18:0" 519 | } 520 | ], 521 | "id": 33, 522 | "name": "Block", 523 | "src": "343:35:0" 524 | } 525 | ], 526 | "id": 34, 527 | "name": "FunctionDefinition", 528 | "src": "322:56:0" 529 | }, 530 | { 531 | "attributes": { 532 | "constant": false, 533 | "implemented": true, 534 | "isConstructor": false, 535 | "name": "", 536 | "payable": true, 537 | "scope": 72, 538 | "stateMutability": "payable", 539 | "superFunction": null, 540 | "visibility": "public" 541 | }, 542 | "children": [ 543 | { 544 | "attributes": { 545 | "parameters": [ 546 | null 547 | ] 548 | }, 549 | "children": [], 550 | "id": 35, 551 | "name": "ParameterList", 552 | "src": "447:2:0" 553 | }, 554 | { 555 | "attributes": { 556 | "parameters": [ 557 | null 558 | ] 559 | }, 560 | "children": [], 561 | "id": 38, 562 | "name": "ParameterList", 563 | "src": "472:0:0" 564 | }, 565 | { 566 | "attributes": { 567 | "arguments": [ 568 | null 569 | ] 570 | }, 571 | "children": [ 572 | { 573 | "attributes": { 574 | "argumentTypes": null, 575 | "overloadedDeclarations": [ 576 | null 577 | ], 578 | "referencedDeclaration": 25, 579 | "type": "modifier ()", 580 | "value": "whenNotPaused" 581 | }, 582 | "id": 36, 583 | "name": "Identifier", 584 | "src": "450:13:0" 585 | } 586 | ], 587 | "id": 37, 588 | "name": "ModifierInvocation", 589 | "src": "450:13:0" 590 | }, 591 | { 592 | "attributes": { 593 | "statements": [ 594 | null 595 | ] 596 | }, 597 | "children": [], 598 | "id": 39, 599 | "name": "Block", 600 | "src": "472:7:0" 601 | } 602 | ], 603 | "id": 40, 604 | "name": "FunctionDefinition", 605 | "src": "438:41:0" 606 | }, 607 | { 608 | "attributes": { 609 | "constant": false, 610 | "implemented": true, 611 | "isConstructor": false, 612 | "name": "pause", 613 | "payable": false, 614 | "scope": 72, 615 | "stateMutability": "nonpayable", 616 | "superFunction": null, 617 | "visibility": "public" 618 | }, 619 | "children": [ 620 | { 621 | "attributes": { 622 | "parameters": [ 623 | null 624 | ] 625 | }, 626 | "children": [], 627 | "id": 41, 628 | "name": "ParameterList", 629 | "src": "499:2:0" 630 | }, 631 | { 632 | "attributes": { 633 | "parameters": [ 634 | null 635 | ] 636 | }, 637 | "children": [], 638 | "id": 44, 639 | "name": "ParameterList", 640 | "src": "519:0:0" 641 | }, 642 | { 643 | "attributes": { 644 | "arguments": [ 645 | null 646 | ] 647 | }, 648 | "children": [ 649 | { 650 | "attributes": { 651 | "argumentTypes": null, 652 | "overloadedDeclarations": [ 653 | null 654 | ], 655 | "referencedDeclaration": 16, 656 | "type": "modifier ()", 657 | "value": "onlyOwner" 658 | }, 659 | "id": 42, 660 | "name": "Identifier", 661 | "src": "509:9:0" 662 | } 663 | ], 664 | "id": 43, 665 | "name": "ModifierInvocation", 666 | "src": "509:9:0" 667 | }, 668 | { 669 | "children": [ 670 | { 671 | "children": [ 672 | { 673 | "attributes": { 674 | "argumentTypes": null, 675 | "isConstant": false, 676 | "isLValue": false, 677 | "isPure": false, 678 | "lValueRequested": false, 679 | "operator": "=", 680 | "type": "bool" 681 | }, 682 | "children": [ 683 | { 684 | "attributes": { 685 | "argumentTypes": null, 686 | "overloadedDeclarations": [ 687 | null 688 | ], 689 | "referencedDeclaration": 5, 690 | "type": "bool", 691 | "value": "paused" 692 | }, 693 | "id": 45, 694 | "name": "Identifier", 695 | "src": "529:6:0" 696 | }, 697 | { 698 | "attributes": { 699 | "argumentTypes": null, 700 | "hexvalue": "74727565", 701 | "isConstant": false, 702 | "isLValue": false, 703 | "isPure": true, 704 | "lValueRequested": false, 705 | "subdenomination": null, 706 | "token": "bool", 707 | "type": "bool", 708 | "value": "true" 709 | }, 710 | "id": 46, 711 | "name": "Literal", 712 | "src": "538:4:0" 713 | } 714 | ], 715 | "id": 47, 716 | "name": "Assignment", 717 | "src": "529:13:0" 718 | } 719 | ], 720 | "id": 48, 721 | "name": "ExpressionStatement", 722 | "src": "529:13:0" 723 | } 724 | ], 725 | "id": 49, 726 | "name": "Block", 727 | "src": "519:30:0" 728 | } 729 | ], 730 | "id": 50, 731 | "name": "FunctionDefinition", 732 | "src": "485:64:0" 733 | }, 734 | { 735 | "attributes": { 736 | "constant": false, 737 | "implemented": true, 738 | "isConstructor": false, 739 | "name": "unpause", 740 | "payable": false, 741 | "scope": 72, 742 | "stateMutability": "nonpayable", 743 | "superFunction": null, 744 | "visibility": "public" 745 | }, 746 | "children": [ 747 | { 748 | "attributes": { 749 | "parameters": [ 750 | null 751 | ] 752 | }, 753 | "children": [], 754 | "id": 51, 755 | "name": "ParameterList", 756 | "src": "571:2:0" 757 | }, 758 | { 759 | "attributes": { 760 | "parameters": [ 761 | null 762 | ] 763 | }, 764 | "children": [], 765 | "id": 54, 766 | "name": "ParameterList", 767 | "src": "591:0:0" 768 | }, 769 | { 770 | "attributes": { 771 | "arguments": [ 772 | null 773 | ] 774 | }, 775 | "children": [ 776 | { 777 | "attributes": { 778 | "argumentTypes": null, 779 | "overloadedDeclarations": [ 780 | null 781 | ], 782 | "referencedDeclaration": 16, 783 | "type": "modifier ()", 784 | "value": "onlyOwner" 785 | }, 786 | "id": 52, 787 | "name": "Identifier", 788 | "src": "581:9:0" 789 | } 790 | ], 791 | "id": 53, 792 | "name": "ModifierInvocation", 793 | "src": "581:9:0" 794 | }, 795 | { 796 | "children": [ 797 | { 798 | "children": [ 799 | { 800 | "attributes": { 801 | "argumentTypes": null, 802 | "isConstant": false, 803 | "isLValue": false, 804 | "isPure": false, 805 | "lValueRequested": false, 806 | "operator": "=", 807 | "type": "bool" 808 | }, 809 | "children": [ 810 | { 811 | "attributes": { 812 | "argumentTypes": null, 813 | "overloadedDeclarations": [ 814 | null 815 | ], 816 | "referencedDeclaration": 5, 817 | "type": "bool", 818 | "value": "paused" 819 | }, 820 | "id": 55, 821 | "name": "Identifier", 822 | "src": "601:6:0" 823 | }, 824 | { 825 | "attributes": { 826 | "argumentTypes": null, 827 | "hexvalue": "66616c7365", 828 | "isConstant": false, 829 | "isLValue": false, 830 | "isPure": true, 831 | "lValueRequested": false, 832 | "subdenomination": null, 833 | "token": "bool", 834 | "type": "bool", 835 | "value": "false" 836 | }, 837 | "id": 56, 838 | "name": "Literal", 839 | "src": "610:5:0" 840 | } 841 | ], 842 | "id": 57, 843 | "name": "Assignment", 844 | "src": "601:14:0" 845 | } 846 | ], 847 | "id": 58, 848 | "name": "ExpressionStatement", 849 | "src": "601:14:0" 850 | } 851 | ], 852 | "id": 59, 853 | "name": "Block", 854 | "src": "591:31:0" 855 | } 856 | ], 857 | "id": 60, 858 | "name": "FunctionDefinition", 859 | "src": "555:67:0" 860 | }, 861 | { 862 | "attributes": { 863 | "constant": false, 864 | "implemented": true, 865 | "isConstructor": false, 866 | "modifiers": [ 867 | null 868 | ], 869 | "name": "removeFunds", 870 | "payable": false, 871 | "scope": 72, 872 | "stateMutability": "nonpayable", 873 | "superFunction": null, 874 | "visibility": "public" 875 | }, 876 | "children": [ 877 | { 878 | "attributes": { 879 | "parameters": [ 880 | null 881 | ] 882 | }, 883 | "children": [], 884 | "id": 61, 885 | "name": "ParameterList", 886 | "src": "648:2:0" 887 | }, 888 | { 889 | "attributes": { 890 | "parameters": [ 891 | null 892 | ] 893 | }, 894 | "children": [], 895 | "id": 62, 896 | "name": "ParameterList", 897 | "src": "658:0:0" 898 | }, 899 | { 900 | "children": [ 901 | { 902 | "children": [ 903 | { 904 | "attributes": { 905 | "argumentTypes": null, 906 | "isConstant": false, 907 | "isLValue": false, 908 | "isPure": false, 909 | "isStructConstructorCall": false, 910 | "lValueRequested": false, 911 | "names": [ 912 | null 913 | ], 914 | "type": "tuple()", 915 | "type_conversion": false 916 | }, 917 | "children": [ 918 | { 919 | "attributes": { 920 | "argumentTypes": [ 921 | { 922 | "typeIdentifier": "t_uint256", 923 | "typeString": "uint256" 924 | } 925 | ], 926 | "isConstant": false, 927 | "isLValue": false, 928 | "isPure": false, 929 | "lValueRequested": false, 930 | "member_name": "transfer", 931 | "referencedDeclaration": null, 932 | "type": "function (uint256)" 933 | }, 934 | "children": [ 935 | { 936 | "attributes": { 937 | "argumentTypes": null, 938 | "overloadedDeclarations": [ 939 | null 940 | ], 941 | "referencedDeclaration": 3, 942 | "type": "address", 943 | "value": "owner" 944 | }, 945 | "id": 63, 946 | "name": "Identifier", 947 | "src": "668:5:0" 948 | } 949 | ], 950 | "id": 65, 951 | "name": "MemberAccess", 952 | "src": "668:14:0" 953 | }, 954 | { 955 | "attributes": { 956 | "argumentTypes": null, 957 | "isConstant": false, 958 | "isLValue": false, 959 | "isPure": false, 960 | "lValueRequested": false, 961 | "member_name": "balance", 962 | "referencedDeclaration": null, 963 | "type": "uint256" 964 | }, 965 | "children": [ 966 | { 967 | "attributes": { 968 | "argumentTypes": null, 969 | "overloadedDeclarations": [ 970 | null 971 | ], 972 | "referencedDeclaration": 152, 973 | "type": "contract FundRaise", 974 | "value": "this" 975 | }, 976 | "id": 66, 977 | "name": "Identifier", 978 | "src": "683:4:0" 979 | } 980 | ], 981 | "id": 67, 982 | "name": "MemberAccess", 983 | "src": "683:12:0" 984 | } 985 | ], 986 | "id": 68, 987 | "name": "FunctionCall", 988 | "src": "668:28:0" 989 | } 990 | ], 991 | "id": 69, 992 | "name": "ExpressionStatement", 993 | "src": "668:28:0" 994 | } 995 | ], 996 | "id": 70, 997 | "name": "Block", 998 | "src": "658:45:0" 999 | } 1000 | ], 1001 | "id": 71, 1002 | "name": "FunctionDefinition", 1003 | "src": "628:75:0" 1004 | } 1005 | ], 1006 | "id": 72, 1007 | "name": "ContractDefinition", 1008 | "src": "26:679:0" 1009 | } 1010 | ], 1011 | "id": 73, 1012 | "name": "SourceUnit", 1013 | "src": "0:706:0" 1014 | }, 1015 | "networks": { 1016 | "1511774177944": { 1017 | "events": {}, 1018 | "links": {}, 1019 | "address": "0xefddba80dc2901d2305977bf470b8b6e945c6d59" 1020 | } 1021 | }, 1022 | "schemaVersion": "1.0.0", 1023 | "updatedAt": "2017-11-27T09:23:38.535Z" 1024 | } -------------------------------------------------------------------------------- /build/contracts/Migrations.json: -------------------------------------------------------------------------------- 1 | { 2 | "contractName": "Migrations", 3 | "abi": [ 4 | { 5 | "constant": false, 6 | "inputs": [ 7 | { 8 | "name": "new_address", 9 | "type": "address" 10 | } 11 | ], 12 | "name": "upgrade", 13 | "outputs": [], 14 | "payable": false, 15 | "stateMutability": "nonpayable", 16 | "type": "function" 17 | }, 18 | { 19 | "constant": true, 20 | "inputs": [], 21 | "name": "last_completed_migration", 22 | "outputs": [ 23 | { 24 | "name": "", 25 | "type": "uint256" 26 | } 27 | ], 28 | "payable": false, 29 | "stateMutability": "view", 30 | "type": "function" 31 | }, 32 | { 33 | "constant": true, 34 | "inputs": [], 35 | "name": "owner", 36 | "outputs": [ 37 | { 38 | "name": "", 39 | "type": "address" 40 | } 41 | ], 42 | "payable": false, 43 | "stateMutability": "view", 44 | "type": "function" 45 | }, 46 | { 47 | "constant": false, 48 | "inputs": [ 49 | { 50 | "name": "completed", 51 | "type": "uint256" 52 | } 53 | ], 54 | "name": "setCompleted", 55 | "outputs": [], 56 | "payable": false, 57 | "stateMutability": "nonpayable", 58 | "type": "function" 59 | }, 60 | { 61 | "inputs": [], 62 | "payable": false, 63 | "stateMutability": "nonpayable", 64 | "type": "constructor" 65 | } 66 | ], 67 | "bytecode": "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101de8061003b6000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630900f010811461005d578063445df0ac1461007e5780638da5cb5b146100a3578063fdacd576146100d257600080fd5b341561006857600080fd5b61007c600160a060020a03600435166100e8565b005b341561008957600080fd5b61009161017d565b60405190815260200160405180910390f35b34156100ae57600080fd5b6100b6610183565b604051600160a060020a03909116815260200160405180910390f35b34156100dd57600080fd5b61007c600435610192565b6000805433600160a060020a03908116911614156101795781905080600160a060020a031663fdacd5766001546040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401600060405180830381600087803b151561016457600080fd5b6102c65a03f1151561017557600080fd5b5050505b5050565b60015481565b600054600160a060020a031681565b60005433600160a060020a03908116911614156101af5760018190555b505600a165627a7a723058204bb8db597b6e64d231fa1eab4230b2392c3197051e00619485a2e0d6875b1ceb0029", 68 | "deployedBytecode": "0x606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630900f010811461005d578063445df0ac1461007e5780638da5cb5b146100a3578063fdacd576146100d257600080fd5b341561006857600080fd5b61007c600160a060020a03600435166100e8565b005b341561008957600080fd5b61009161017d565b60405190815260200160405180910390f35b34156100ae57600080fd5b6100b6610183565b604051600160a060020a03909116815260200160405180910390f35b34156100dd57600080fd5b61007c600435610192565b6000805433600160a060020a03908116911614156101795781905080600160a060020a031663fdacd5766001546040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401600060405180830381600087803b151561016457600080fd5b6102c65a03f1151561017557600080fd5b5050505b5050565b60015481565b600054600160a060020a031681565b60005433600160a060020a03908116911614156101af5760018190555b505600a165627a7a723058204bb8db597b6e64d231fa1eab4230b2392c3197051e00619485a2e0d6875b1ceb0029", 69 | "sourceMap": "26:467:1:-;;;178:51;;;;;;;;206:5;:18;;-1:-1:-1;;;;;214:10:1;206:18;-1:-1:-1;;;;;;206:18:1;;;;;;26:467;;;;;;", 70 | "deployedSourceMap": "26:467:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;333:158;;;;;;;;;;-1:-1:-1;;;;;333:158:1;;;;;;;74:36;;;;;;;;;;;;;;;;;;;;;;;;;;;50:20;;;;;;;;;;;;;;;-1:-1:-1;;;;;50:20:1;;;;;;;;;;;;;;233:96;;;;;;;;;;;;;;333:158;388:19;161:5;;147:10;-1:-1:-1;;;;;147:19:1;;;161:5;;147:19;143:26;;;421:11;388:45;;439:8;-1:-1:-1;;;;;439:21:1;;461:24;;439:47;;;;;;;;;;;;;;;;;;-1:-1:-1;439:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;143:26;333:158;;:::o;74:36::-;;;;:::o;50:20::-;;;-1:-1:-1;;;;;50:20:1;;:::o;233:96::-;161:5;;147:10;-1:-1:-1;;;;;147:19:1;;;161:5;;147:19;143:26;;;288:24;:36;;;143:26;233:96;:::o", 71 | "source": "pragma solidity ^0.4.17;\n\ncontract Migrations {\n address public owner;\n uint public last_completed_migration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n function Migrations() {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) restricted {\n last_completed_migration = completed;\n }\n\n function upgrade(address new_address) restricted {\n Migrations upgraded = Migrations(new_address);\n upgraded.setCompleted(last_completed_migration);\n }\n}\n", 72 | "sourcePath": "/Users/gustavoguimaraes/DAPPS/smart-contract-test-example/contracts/Migrations.sol", 73 | "ast": { 74 | "attributes": { 75 | "absolutePath": "/Users/gustavoguimaraes/DAPPS/smart-contract-test-example/contracts/Migrations.sol", 76 | "exportedSymbols": { 77 | "Migrations": [ 78 | 129 79 | ] 80 | } 81 | }, 82 | "children": [ 83 | { 84 | "attributes": { 85 | "literals": [ 86 | "solidity", 87 | "^", 88 | "0.4", 89 | ".17" 90 | ] 91 | }, 92 | "id": 74, 93 | "name": "PragmaDirective", 94 | "src": "0:24:1" 95 | }, 96 | { 97 | "attributes": { 98 | "baseContracts": [ 99 | null 100 | ], 101 | "contractDependencies": [ 102 | null 103 | ], 104 | "contractKind": "contract", 105 | "documentation": null, 106 | "fullyImplemented": true, 107 | "linearizedBaseContracts": [ 108 | 129 109 | ], 110 | "name": "Migrations", 111 | "scope": 130 112 | }, 113 | "children": [ 114 | { 115 | "attributes": { 116 | "constant": false, 117 | "name": "owner", 118 | "scope": 129, 119 | "stateVariable": true, 120 | "storageLocation": "default", 121 | "type": "address", 122 | "value": null, 123 | "visibility": "public" 124 | }, 125 | "children": [ 126 | { 127 | "attributes": { 128 | "name": "address", 129 | "type": "address" 130 | }, 131 | "id": 75, 132 | "name": "ElementaryTypeName", 133 | "src": "50:7:1" 134 | } 135 | ], 136 | "id": 76, 137 | "name": "VariableDeclaration", 138 | "src": "50:20:1" 139 | }, 140 | { 141 | "attributes": { 142 | "constant": false, 143 | "name": "last_completed_migration", 144 | "scope": 129, 145 | "stateVariable": true, 146 | "storageLocation": "default", 147 | "type": "uint256", 148 | "value": null, 149 | "visibility": "public" 150 | }, 151 | "children": [ 152 | { 153 | "attributes": { 154 | "name": "uint", 155 | "type": "uint256" 156 | }, 157 | "id": 77, 158 | "name": "ElementaryTypeName", 159 | "src": "74:4:1" 160 | } 161 | ], 162 | "id": 78, 163 | "name": "VariableDeclaration", 164 | "src": "74:36:1" 165 | }, 166 | { 167 | "attributes": { 168 | "name": "restricted", 169 | "visibility": "internal" 170 | }, 171 | "children": [ 172 | { 173 | "attributes": { 174 | "parameters": [ 175 | null 176 | ] 177 | }, 178 | "children": [], 179 | "id": 79, 180 | "name": "ParameterList", 181 | "src": "134:2:1" 182 | }, 183 | { 184 | "children": [ 185 | { 186 | "attributes": { 187 | "falseBody": null 188 | }, 189 | "children": [ 190 | { 191 | "attributes": { 192 | "argumentTypes": null, 193 | "commonType": { 194 | "typeIdentifier": "t_address", 195 | "typeString": "address" 196 | }, 197 | "isConstant": false, 198 | "isLValue": false, 199 | "isPure": false, 200 | "lValueRequested": false, 201 | "operator": "==", 202 | "type": "bool" 203 | }, 204 | "children": [ 205 | { 206 | "attributes": { 207 | "argumentTypes": null, 208 | "isConstant": false, 209 | "isLValue": false, 210 | "isPure": false, 211 | "lValueRequested": false, 212 | "member_name": "sender", 213 | "referencedDeclaration": null, 214 | "type": "address" 215 | }, 216 | "children": [ 217 | { 218 | "attributes": { 219 | "argumentTypes": null, 220 | "overloadedDeclarations": [ 221 | null 222 | ], 223 | "referencedDeclaration": 132, 224 | "type": "msg", 225 | "value": "msg" 226 | }, 227 | "id": 80, 228 | "name": "Identifier", 229 | "src": "147:3:1" 230 | } 231 | ], 232 | "id": 81, 233 | "name": "MemberAccess", 234 | "src": "147:10:1" 235 | }, 236 | { 237 | "attributes": { 238 | "argumentTypes": null, 239 | "overloadedDeclarations": [ 240 | null 241 | ], 242 | "referencedDeclaration": 76, 243 | "type": "address", 244 | "value": "owner" 245 | }, 246 | "id": 82, 247 | "name": "Identifier", 248 | "src": "161:5:1" 249 | } 250 | ], 251 | "id": 83, 252 | "name": "BinaryOperation", 253 | "src": "147:19:1" 254 | }, 255 | { 256 | "id": 84, 257 | "name": "PlaceholderStatement", 258 | "src": "168:1:1" 259 | } 260 | ], 261 | "id": 85, 262 | "name": "IfStatement", 263 | "src": "143:26:1" 264 | } 265 | ], 266 | "id": 86, 267 | "name": "Block", 268 | "src": "137:37:1" 269 | } 270 | ], 271 | "id": 87, 272 | "name": "ModifierDefinition", 273 | "src": "115:59:1" 274 | }, 275 | { 276 | "attributes": { 277 | "constant": false, 278 | "implemented": true, 279 | "isConstructor": true, 280 | "modifiers": [ 281 | null 282 | ], 283 | "name": "Migrations", 284 | "payable": false, 285 | "scope": 129, 286 | "stateMutability": "nonpayable", 287 | "superFunction": null, 288 | "visibility": "public" 289 | }, 290 | "children": [ 291 | { 292 | "attributes": { 293 | "parameters": [ 294 | null 295 | ] 296 | }, 297 | "children": [], 298 | "id": 88, 299 | "name": "ParameterList", 300 | "src": "197:2:1" 301 | }, 302 | { 303 | "attributes": { 304 | "parameters": [ 305 | null 306 | ] 307 | }, 308 | "children": [], 309 | "id": 89, 310 | "name": "ParameterList", 311 | "src": "200:0:1" 312 | }, 313 | { 314 | "children": [ 315 | { 316 | "children": [ 317 | { 318 | "attributes": { 319 | "argumentTypes": null, 320 | "isConstant": false, 321 | "isLValue": false, 322 | "isPure": false, 323 | "lValueRequested": false, 324 | "operator": "=", 325 | "type": "address" 326 | }, 327 | "children": [ 328 | { 329 | "attributes": { 330 | "argumentTypes": null, 331 | "overloadedDeclarations": [ 332 | null 333 | ], 334 | "referencedDeclaration": 76, 335 | "type": "address", 336 | "value": "owner" 337 | }, 338 | "id": 90, 339 | "name": "Identifier", 340 | "src": "206:5:1" 341 | }, 342 | { 343 | "attributes": { 344 | "argumentTypes": null, 345 | "isConstant": false, 346 | "isLValue": false, 347 | "isPure": false, 348 | "lValueRequested": false, 349 | "member_name": "sender", 350 | "referencedDeclaration": null, 351 | "type": "address" 352 | }, 353 | "children": [ 354 | { 355 | "attributes": { 356 | "argumentTypes": null, 357 | "overloadedDeclarations": [ 358 | null 359 | ], 360 | "referencedDeclaration": 132, 361 | "type": "msg", 362 | "value": "msg" 363 | }, 364 | "id": 91, 365 | "name": "Identifier", 366 | "src": "214:3:1" 367 | } 368 | ], 369 | "id": 92, 370 | "name": "MemberAccess", 371 | "src": "214:10:1" 372 | } 373 | ], 374 | "id": 93, 375 | "name": "Assignment", 376 | "src": "206:18:1" 377 | } 378 | ], 379 | "id": 94, 380 | "name": "ExpressionStatement", 381 | "src": "206:18:1" 382 | } 383 | ], 384 | "id": 95, 385 | "name": "Block", 386 | "src": "200:29:1" 387 | } 388 | ], 389 | "id": 96, 390 | "name": "FunctionDefinition", 391 | "src": "178:51:1" 392 | }, 393 | { 394 | "attributes": { 395 | "constant": false, 396 | "implemented": true, 397 | "isConstructor": false, 398 | "name": "setCompleted", 399 | "payable": false, 400 | "scope": 129, 401 | "stateMutability": "nonpayable", 402 | "superFunction": null, 403 | "visibility": "public" 404 | }, 405 | "children": [ 406 | { 407 | "children": [ 408 | { 409 | "attributes": { 410 | "constant": false, 411 | "name": "completed", 412 | "scope": 108, 413 | "stateVariable": false, 414 | "storageLocation": "default", 415 | "type": "uint256", 416 | "value": null, 417 | "visibility": "internal" 418 | }, 419 | "children": [ 420 | { 421 | "attributes": { 422 | "name": "uint", 423 | "type": "uint256" 424 | }, 425 | "id": 97, 426 | "name": "ElementaryTypeName", 427 | "src": "255:4:1" 428 | } 429 | ], 430 | "id": 98, 431 | "name": "VariableDeclaration", 432 | "src": "255:14:1" 433 | } 434 | ], 435 | "id": 99, 436 | "name": "ParameterList", 437 | "src": "254:16:1" 438 | }, 439 | { 440 | "attributes": { 441 | "parameters": [ 442 | null 443 | ] 444 | }, 445 | "children": [], 446 | "id": 102, 447 | "name": "ParameterList", 448 | "src": "282:0:1" 449 | }, 450 | { 451 | "attributes": { 452 | "arguments": [ 453 | null 454 | ] 455 | }, 456 | "children": [ 457 | { 458 | "attributes": { 459 | "argumentTypes": null, 460 | "overloadedDeclarations": [ 461 | null 462 | ], 463 | "referencedDeclaration": 87, 464 | "type": "modifier ()", 465 | "value": "restricted" 466 | }, 467 | "id": 100, 468 | "name": "Identifier", 469 | "src": "271:10:1" 470 | } 471 | ], 472 | "id": 101, 473 | "name": "ModifierInvocation", 474 | "src": "271:10:1" 475 | }, 476 | { 477 | "children": [ 478 | { 479 | "children": [ 480 | { 481 | "attributes": { 482 | "argumentTypes": null, 483 | "isConstant": false, 484 | "isLValue": false, 485 | "isPure": false, 486 | "lValueRequested": false, 487 | "operator": "=", 488 | "type": "uint256" 489 | }, 490 | "children": [ 491 | { 492 | "attributes": { 493 | "argumentTypes": null, 494 | "overloadedDeclarations": [ 495 | null 496 | ], 497 | "referencedDeclaration": 78, 498 | "type": "uint256", 499 | "value": "last_completed_migration" 500 | }, 501 | "id": 103, 502 | "name": "Identifier", 503 | "src": "288:24:1" 504 | }, 505 | { 506 | "attributes": { 507 | "argumentTypes": null, 508 | "overloadedDeclarations": [ 509 | null 510 | ], 511 | "referencedDeclaration": 98, 512 | "type": "uint256", 513 | "value": "completed" 514 | }, 515 | "id": 104, 516 | "name": "Identifier", 517 | "src": "315:9:1" 518 | } 519 | ], 520 | "id": 105, 521 | "name": "Assignment", 522 | "src": "288:36:1" 523 | } 524 | ], 525 | "id": 106, 526 | "name": "ExpressionStatement", 527 | "src": "288:36:1" 528 | } 529 | ], 530 | "id": 107, 531 | "name": "Block", 532 | "src": "282:47:1" 533 | } 534 | ], 535 | "id": 108, 536 | "name": "FunctionDefinition", 537 | "src": "233:96:1" 538 | }, 539 | { 540 | "attributes": { 541 | "constant": false, 542 | "implemented": true, 543 | "isConstructor": false, 544 | "name": "upgrade", 545 | "payable": false, 546 | "scope": 129, 547 | "stateMutability": "nonpayable", 548 | "superFunction": null, 549 | "visibility": "public" 550 | }, 551 | "children": [ 552 | { 553 | "children": [ 554 | { 555 | "attributes": { 556 | "constant": false, 557 | "name": "new_address", 558 | "scope": 128, 559 | "stateVariable": false, 560 | "storageLocation": "default", 561 | "type": "address", 562 | "value": null, 563 | "visibility": "internal" 564 | }, 565 | "children": [ 566 | { 567 | "attributes": { 568 | "name": "address", 569 | "type": "address" 570 | }, 571 | "id": 109, 572 | "name": "ElementaryTypeName", 573 | "src": "350:7:1" 574 | } 575 | ], 576 | "id": 110, 577 | "name": "VariableDeclaration", 578 | "src": "350:19:1" 579 | } 580 | ], 581 | "id": 111, 582 | "name": "ParameterList", 583 | "src": "349:21:1" 584 | }, 585 | { 586 | "attributes": { 587 | "parameters": [ 588 | null 589 | ] 590 | }, 591 | "children": [], 592 | "id": 114, 593 | "name": "ParameterList", 594 | "src": "382:0:1" 595 | }, 596 | { 597 | "attributes": { 598 | "arguments": [ 599 | null 600 | ] 601 | }, 602 | "children": [ 603 | { 604 | "attributes": { 605 | "argumentTypes": null, 606 | "overloadedDeclarations": [ 607 | null 608 | ], 609 | "referencedDeclaration": 87, 610 | "type": "modifier ()", 611 | "value": "restricted" 612 | }, 613 | "id": 112, 614 | "name": "Identifier", 615 | "src": "371:10:1" 616 | } 617 | ], 618 | "id": 113, 619 | "name": "ModifierInvocation", 620 | "src": "371:10:1" 621 | }, 622 | { 623 | "children": [ 624 | { 625 | "attributes": { 626 | "assignments": [ 627 | 116 628 | ] 629 | }, 630 | "children": [ 631 | { 632 | "attributes": { 633 | "constant": false, 634 | "name": "upgraded", 635 | "scope": 128, 636 | "stateVariable": false, 637 | "storageLocation": "default", 638 | "type": "contract Migrations", 639 | "value": null, 640 | "visibility": "internal" 641 | }, 642 | "children": [ 643 | { 644 | "attributes": { 645 | "contractScope": null, 646 | "name": "Migrations", 647 | "referencedDeclaration": 129, 648 | "type": "contract Migrations" 649 | }, 650 | "id": 115, 651 | "name": "UserDefinedTypeName", 652 | "src": "388:10:1" 653 | } 654 | ], 655 | "id": 116, 656 | "name": "VariableDeclaration", 657 | "src": "388:19:1" 658 | }, 659 | { 660 | "attributes": { 661 | "argumentTypes": null, 662 | "isConstant": false, 663 | "isLValue": false, 664 | "isPure": false, 665 | "isStructConstructorCall": false, 666 | "lValueRequested": false, 667 | "names": [ 668 | null 669 | ], 670 | "type": "contract Migrations", 671 | "type_conversion": true 672 | }, 673 | "children": [ 674 | { 675 | "attributes": { 676 | "argumentTypes": [ 677 | { 678 | "typeIdentifier": "t_address", 679 | "typeString": "address" 680 | } 681 | ], 682 | "overloadedDeclarations": [ 683 | null 684 | ], 685 | "referencedDeclaration": 129, 686 | "type": "type(contract Migrations)", 687 | "value": "Migrations" 688 | }, 689 | "id": 117, 690 | "name": "Identifier", 691 | "src": "410:10:1" 692 | }, 693 | { 694 | "attributes": { 695 | "argumentTypes": null, 696 | "overloadedDeclarations": [ 697 | null 698 | ], 699 | "referencedDeclaration": 110, 700 | "type": "address", 701 | "value": "new_address" 702 | }, 703 | "id": 118, 704 | "name": "Identifier", 705 | "src": "421:11:1" 706 | } 707 | ], 708 | "id": 119, 709 | "name": "FunctionCall", 710 | "src": "410:23:1" 711 | } 712 | ], 713 | "id": 120, 714 | "name": "VariableDeclarationStatement", 715 | "src": "388:45:1" 716 | }, 717 | { 718 | "children": [ 719 | { 720 | "attributes": { 721 | "argumentTypes": null, 722 | "isConstant": false, 723 | "isLValue": false, 724 | "isPure": false, 725 | "isStructConstructorCall": false, 726 | "lValueRequested": false, 727 | "names": [ 728 | null 729 | ], 730 | "type": "tuple()", 731 | "type_conversion": false 732 | }, 733 | "children": [ 734 | { 735 | "attributes": { 736 | "argumentTypes": [ 737 | { 738 | "typeIdentifier": "t_uint256", 739 | "typeString": "uint256" 740 | } 741 | ], 742 | "isConstant": false, 743 | "isLValue": false, 744 | "isPure": false, 745 | "lValueRequested": false, 746 | "member_name": "setCompleted", 747 | "referencedDeclaration": 108, 748 | "type": "function (uint256) external" 749 | }, 750 | "children": [ 751 | { 752 | "attributes": { 753 | "argumentTypes": null, 754 | "overloadedDeclarations": [ 755 | null 756 | ], 757 | "referencedDeclaration": 116, 758 | "type": "contract Migrations", 759 | "value": "upgraded" 760 | }, 761 | "id": 121, 762 | "name": "Identifier", 763 | "src": "439:8:1" 764 | } 765 | ], 766 | "id": 123, 767 | "name": "MemberAccess", 768 | "src": "439:21:1" 769 | }, 770 | { 771 | "attributes": { 772 | "argumentTypes": null, 773 | "overloadedDeclarations": [ 774 | null 775 | ], 776 | "referencedDeclaration": 78, 777 | "type": "uint256", 778 | "value": "last_completed_migration" 779 | }, 780 | "id": 124, 781 | "name": "Identifier", 782 | "src": "461:24:1" 783 | } 784 | ], 785 | "id": 125, 786 | "name": "FunctionCall", 787 | "src": "439:47:1" 788 | } 789 | ], 790 | "id": 126, 791 | "name": "ExpressionStatement", 792 | "src": "439:47:1" 793 | } 794 | ], 795 | "id": 127, 796 | "name": "Block", 797 | "src": "382:109:1" 798 | } 799 | ], 800 | "id": 128, 801 | "name": "FunctionDefinition", 802 | "src": "333:158:1" 803 | } 804 | ], 805 | "id": 129, 806 | "name": "ContractDefinition", 807 | "src": "26:467:1" 808 | } 809 | ], 810 | "id": 130, 811 | "name": "SourceUnit", 812 | "src": "0:494:1" 813 | }, 814 | "networks": { 815 | "1511774177944": { 816 | "events": {}, 817 | "links": {}, 818 | "address": "0xfbff6bd58b62fe16b1b12e85e2468cc885c6b372" 819 | } 820 | }, 821 | "schemaVersion": "1.0.0", 822 | "updatedAt": "2017-11-27T09:23:38.538Z" 823 | } -------------------------------------------------------------------------------- /contracts/FundRaise.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.17; 2 | 3 | contract FundRaise { 4 | address public owner; 5 | bool paused; 6 | 7 | // modifiers 8 | modifier onlyOwner() { 9 | assert(owner == msg.sender); 10 | _; 11 | } 12 | 13 | modifier whenNotPaused(){ 14 | require(!paused); 15 | _; 16 | } 17 | 18 | // @dev constructor function. Sets contract owner 19 | function FundRaise() { 20 | owner = msg.sender; 21 | } 22 | 23 | // fallback function to accept ETH into contract. 24 | function () whenNotPaused payable { 25 | } 26 | 27 | function pause() public onlyOwner { 28 | paused = true; 29 | } 30 | 31 | function unpause() public onlyOwner { 32 | paused = false; 33 | } 34 | 35 | function removeFunds() public { 36 | owner.transfer(this.balance); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /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() { 12 | owner = msg.sender; 13 | } 14 | 15 | function setCompleted(uint completed) restricted { 16 | last_completed_migration = completed; 17 | } 18 | 19 | function upgrade(address new_address) restricted { 20 | Migrations upgraded = Migrations(new_address); 21 | upgraded.setCompleted(last_completed_migration); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /migrations/1_initial_migration.js: -------------------------------------------------------------------------------- 1 | var Migrations = artifacts.require("./Migrations.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Migrations); 5 | }; 6 | -------------------------------------------------------------------------------- /migrations/2_deploy_contracts.js: -------------------------------------------------------------------------------- 1 | const FundRaise = artifacts.require("./FundRaise.sol") 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(FundRaise) 5 | } 6 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "smart-contract-test-example", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ansi-regex": { 8 | "version": "2.1.1", 9 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 10 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 11 | "dev": true 12 | }, 13 | "ansi-styles": { 14 | "version": "2.2.1", 15 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 16 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 17 | "dev": true 18 | }, 19 | "babel-code-frame": { 20 | "version": "6.26.0", 21 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 22 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 23 | "dev": true, 24 | "requires": { 25 | "chalk": "1.1.3", 26 | "esutils": "2.0.2", 27 | "js-tokens": "3.0.2" 28 | } 29 | }, 30 | "babel-core": { 31 | "version": "6.26.0", 32 | "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", 33 | "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", 34 | "dev": true, 35 | "requires": { 36 | "babel-code-frame": "6.26.0", 37 | "babel-generator": "6.26.0", 38 | "babel-helpers": "6.24.1", 39 | "babel-messages": "6.23.0", 40 | "babel-register": "6.26.0", 41 | "babel-runtime": "6.26.0", 42 | "babel-template": "6.26.0", 43 | "babel-traverse": "6.26.0", 44 | "babel-types": "6.26.0", 45 | "babylon": "6.18.0", 46 | "convert-source-map": "1.5.0", 47 | "debug": "2.6.9", 48 | "json5": "0.5.1", 49 | "lodash": "4.17.4", 50 | "minimatch": "3.0.4", 51 | "path-is-absolute": "1.0.1", 52 | "private": "0.1.8", 53 | "slash": "1.0.0", 54 | "source-map": "0.5.7" 55 | } 56 | }, 57 | "babel-generator": { 58 | "version": "6.26.0", 59 | "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", 60 | "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", 61 | "dev": true, 62 | "requires": { 63 | "babel-messages": "6.23.0", 64 | "babel-runtime": "6.26.0", 65 | "babel-types": "6.26.0", 66 | "detect-indent": "4.0.0", 67 | "jsesc": "1.3.0", 68 | "lodash": "4.17.4", 69 | "source-map": "0.5.7", 70 | "trim-right": "1.0.1" 71 | } 72 | }, 73 | "babel-helper-call-delegate": { 74 | "version": "6.24.1", 75 | "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", 76 | "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", 77 | "dev": true, 78 | "requires": { 79 | "babel-helper-hoist-variables": "6.24.1", 80 | "babel-runtime": "6.26.0", 81 | "babel-traverse": "6.26.0", 82 | "babel-types": "6.26.0" 83 | } 84 | }, 85 | "babel-helper-define-map": { 86 | "version": "6.26.0", 87 | "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", 88 | "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", 89 | "dev": true, 90 | "requires": { 91 | "babel-helper-function-name": "6.24.1", 92 | "babel-runtime": "6.26.0", 93 | "babel-types": "6.26.0", 94 | "lodash": "4.17.4" 95 | } 96 | }, 97 | "babel-helper-function-name": { 98 | "version": "6.24.1", 99 | "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 100 | "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", 101 | "dev": true, 102 | "requires": { 103 | "babel-helper-get-function-arity": "6.24.1", 104 | "babel-runtime": "6.26.0", 105 | "babel-template": "6.26.0", 106 | "babel-traverse": "6.26.0", 107 | "babel-types": "6.26.0" 108 | } 109 | }, 110 | "babel-helper-get-function-arity": { 111 | "version": "6.24.1", 112 | "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", 113 | "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", 114 | "dev": true, 115 | "requires": { 116 | "babel-runtime": "6.26.0", 117 | "babel-types": "6.26.0" 118 | } 119 | }, 120 | "babel-helper-hoist-variables": { 121 | "version": "6.24.1", 122 | "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", 123 | "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", 124 | "dev": true, 125 | "requires": { 126 | "babel-runtime": "6.26.0", 127 | "babel-types": "6.26.0" 128 | } 129 | }, 130 | "babel-helper-optimise-call-expression": { 131 | "version": "6.24.1", 132 | "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", 133 | "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", 134 | "dev": true, 135 | "requires": { 136 | "babel-runtime": "6.26.0", 137 | "babel-types": "6.26.0" 138 | } 139 | }, 140 | "babel-helper-regex": { 141 | "version": "6.26.0", 142 | "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", 143 | "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", 144 | "dev": true, 145 | "requires": { 146 | "babel-runtime": "6.26.0", 147 | "babel-types": "6.26.0", 148 | "lodash": "4.17.4" 149 | } 150 | }, 151 | "babel-helper-remap-async-to-generator": { 152 | "version": "6.24.1", 153 | "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", 154 | "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", 155 | "dev": true, 156 | "requires": { 157 | "babel-helper-function-name": "6.24.1", 158 | "babel-runtime": "6.26.0", 159 | "babel-template": "6.26.0", 160 | "babel-traverse": "6.26.0", 161 | "babel-types": "6.26.0" 162 | } 163 | }, 164 | "babel-helper-replace-supers": { 165 | "version": "6.24.1", 166 | "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", 167 | "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", 168 | "dev": true, 169 | "requires": { 170 | "babel-helper-optimise-call-expression": "6.24.1", 171 | "babel-messages": "6.23.0", 172 | "babel-runtime": "6.26.0", 173 | "babel-template": "6.26.0", 174 | "babel-traverse": "6.26.0", 175 | "babel-types": "6.26.0" 176 | } 177 | }, 178 | "babel-helpers": { 179 | "version": "6.24.1", 180 | "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", 181 | "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", 182 | "dev": true, 183 | "requires": { 184 | "babel-runtime": "6.26.0", 185 | "babel-template": "6.26.0" 186 | } 187 | }, 188 | "babel-messages": { 189 | "version": "6.23.0", 190 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 191 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 192 | "dev": true, 193 | "requires": { 194 | "babel-runtime": "6.26.0" 195 | } 196 | }, 197 | "babel-plugin-check-es2015-constants": { 198 | "version": "6.22.0", 199 | "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", 200 | "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", 201 | "dev": true, 202 | "requires": { 203 | "babel-runtime": "6.26.0" 204 | } 205 | }, 206 | "babel-plugin-syntax-async-functions": { 207 | "version": "6.13.0", 208 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", 209 | "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", 210 | "dev": true 211 | }, 212 | "babel-plugin-syntax-trailing-function-commas": { 213 | "version": "6.22.0", 214 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", 215 | "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", 216 | "dev": true 217 | }, 218 | "babel-plugin-transform-async-to-generator": { 219 | "version": "6.24.1", 220 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", 221 | "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", 222 | "dev": true, 223 | "requires": { 224 | "babel-helper-remap-async-to-generator": "6.24.1", 225 | "babel-plugin-syntax-async-functions": "6.13.0", 226 | "babel-runtime": "6.26.0" 227 | } 228 | }, 229 | "babel-plugin-transform-es2015-arrow-functions": { 230 | "version": "6.22.0", 231 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", 232 | "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", 233 | "dev": true, 234 | "requires": { 235 | "babel-runtime": "6.26.0" 236 | } 237 | }, 238 | "babel-plugin-transform-es2015-block-scoped-functions": { 239 | "version": "6.22.0", 240 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", 241 | "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", 242 | "dev": true, 243 | "requires": { 244 | "babel-runtime": "6.26.0" 245 | } 246 | }, 247 | "babel-plugin-transform-es2015-block-scoping": { 248 | "version": "6.26.0", 249 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", 250 | "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", 251 | "dev": true, 252 | "requires": { 253 | "babel-runtime": "6.26.0", 254 | "babel-template": "6.26.0", 255 | "babel-traverse": "6.26.0", 256 | "babel-types": "6.26.0", 257 | "lodash": "4.17.4" 258 | } 259 | }, 260 | "babel-plugin-transform-es2015-classes": { 261 | "version": "6.24.1", 262 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", 263 | "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", 264 | "dev": true, 265 | "requires": { 266 | "babel-helper-define-map": "6.26.0", 267 | "babel-helper-function-name": "6.24.1", 268 | "babel-helper-optimise-call-expression": "6.24.1", 269 | "babel-helper-replace-supers": "6.24.1", 270 | "babel-messages": "6.23.0", 271 | "babel-runtime": "6.26.0", 272 | "babel-template": "6.26.0", 273 | "babel-traverse": "6.26.0", 274 | "babel-types": "6.26.0" 275 | } 276 | }, 277 | "babel-plugin-transform-es2015-computed-properties": { 278 | "version": "6.24.1", 279 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", 280 | "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", 281 | "dev": true, 282 | "requires": { 283 | "babel-runtime": "6.26.0", 284 | "babel-template": "6.26.0" 285 | } 286 | }, 287 | "babel-plugin-transform-es2015-destructuring": { 288 | "version": "6.23.0", 289 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", 290 | "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", 291 | "dev": true, 292 | "requires": { 293 | "babel-runtime": "6.26.0" 294 | } 295 | }, 296 | "babel-plugin-transform-es2015-duplicate-keys": { 297 | "version": "6.24.1", 298 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", 299 | "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", 300 | "dev": true, 301 | "requires": { 302 | "babel-runtime": "6.26.0", 303 | "babel-types": "6.26.0" 304 | } 305 | }, 306 | "babel-plugin-transform-es2015-for-of": { 307 | "version": "6.23.0", 308 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", 309 | "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", 310 | "dev": true, 311 | "requires": { 312 | "babel-runtime": "6.26.0" 313 | } 314 | }, 315 | "babel-plugin-transform-es2015-function-name": { 316 | "version": "6.24.1", 317 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", 318 | "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", 319 | "dev": true, 320 | "requires": { 321 | "babel-helper-function-name": "6.24.1", 322 | "babel-runtime": "6.26.0", 323 | "babel-types": "6.26.0" 324 | } 325 | }, 326 | "babel-plugin-transform-es2015-literals": { 327 | "version": "6.22.0", 328 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", 329 | "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", 330 | "dev": true, 331 | "requires": { 332 | "babel-runtime": "6.26.0" 333 | } 334 | }, 335 | "babel-plugin-transform-es2015-modules-amd": { 336 | "version": "6.24.1", 337 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", 338 | "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", 339 | "dev": true, 340 | "requires": { 341 | "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", 342 | "babel-runtime": "6.26.0", 343 | "babel-template": "6.26.0" 344 | } 345 | }, 346 | "babel-plugin-transform-es2015-modules-commonjs": { 347 | "version": "6.26.0", 348 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", 349 | "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", 350 | "dev": true, 351 | "requires": { 352 | "babel-plugin-transform-strict-mode": "6.24.1", 353 | "babel-runtime": "6.26.0", 354 | "babel-template": "6.26.0", 355 | "babel-types": "6.26.0" 356 | } 357 | }, 358 | "babel-plugin-transform-es2015-modules-systemjs": { 359 | "version": "6.24.1", 360 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", 361 | "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", 362 | "dev": true, 363 | "requires": { 364 | "babel-helper-hoist-variables": "6.24.1", 365 | "babel-runtime": "6.26.0", 366 | "babel-template": "6.26.0" 367 | } 368 | }, 369 | "babel-plugin-transform-es2015-modules-umd": { 370 | "version": "6.24.1", 371 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", 372 | "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", 373 | "dev": true, 374 | "requires": { 375 | "babel-plugin-transform-es2015-modules-amd": "6.24.1", 376 | "babel-runtime": "6.26.0", 377 | "babel-template": "6.26.0" 378 | } 379 | }, 380 | "babel-plugin-transform-es2015-object-super": { 381 | "version": "6.24.1", 382 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", 383 | "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", 384 | "dev": true, 385 | "requires": { 386 | "babel-helper-replace-supers": "6.24.1", 387 | "babel-runtime": "6.26.0" 388 | } 389 | }, 390 | "babel-plugin-transform-es2015-parameters": { 391 | "version": "6.24.1", 392 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", 393 | "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", 394 | "dev": true, 395 | "requires": { 396 | "babel-helper-call-delegate": "6.24.1", 397 | "babel-helper-get-function-arity": "6.24.1", 398 | "babel-runtime": "6.26.0", 399 | "babel-template": "6.26.0", 400 | "babel-traverse": "6.26.0", 401 | "babel-types": "6.26.0" 402 | } 403 | }, 404 | "babel-plugin-transform-es2015-shorthand-properties": { 405 | "version": "6.24.1", 406 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", 407 | "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", 408 | "dev": true, 409 | "requires": { 410 | "babel-runtime": "6.26.0", 411 | "babel-types": "6.26.0" 412 | } 413 | }, 414 | "babel-plugin-transform-es2015-spread": { 415 | "version": "6.22.0", 416 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", 417 | "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", 418 | "dev": true, 419 | "requires": { 420 | "babel-runtime": "6.26.0" 421 | } 422 | }, 423 | "babel-plugin-transform-es2015-sticky-regex": { 424 | "version": "6.24.1", 425 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", 426 | "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", 427 | "dev": true, 428 | "requires": { 429 | "babel-helper-regex": "6.26.0", 430 | "babel-runtime": "6.26.0", 431 | "babel-types": "6.26.0" 432 | } 433 | }, 434 | "babel-plugin-transform-es2015-template-literals": { 435 | "version": "6.22.0", 436 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", 437 | "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", 438 | "dev": true, 439 | "requires": { 440 | "babel-runtime": "6.26.0" 441 | } 442 | }, 443 | "babel-plugin-transform-es2015-typeof-symbol": { 444 | "version": "6.23.0", 445 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", 446 | "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", 447 | "dev": true, 448 | "requires": { 449 | "babel-runtime": "6.26.0" 450 | } 451 | }, 452 | "babel-plugin-transform-es2015-unicode-regex": { 453 | "version": "6.24.1", 454 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", 455 | "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", 456 | "dev": true, 457 | "requires": { 458 | "babel-helper-regex": "6.26.0", 459 | "babel-runtime": "6.26.0", 460 | "regexpu-core": "2.0.0" 461 | } 462 | }, 463 | "babel-plugin-transform-regenerator": { 464 | "version": "6.26.0", 465 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", 466 | "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", 467 | "dev": true, 468 | "requires": { 469 | "regenerator-transform": "0.10.1" 470 | } 471 | }, 472 | "babel-plugin-transform-strict-mode": { 473 | "version": "6.24.1", 474 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", 475 | "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", 476 | "dev": true, 477 | "requires": { 478 | "babel-runtime": "6.26.0", 479 | "babel-types": "6.26.0" 480 | } 481 | }, 482 | "babel-polyfill": { 483 | "version": "6.26.0", 484 | "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", 485 | "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", 486 | "dev": true, 487 | "requires": { 488 | "babel-runtime": "6.26.0", 489 | "core-js": "2.5.1", 490 | "regenerator-runtime": "0.10.5" 491 | } 492 | }, 493 | "babel-preset-es2015": { 494 | "version": "6.24.1", 495 | "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", 496 | "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", 497 | "dev": true, 498 | "requires": { 499 | "babel-plugin-check-es2015-constants": "6.22.0", 500 | "babel-plugin-transform-es2015-arrow-functions": "6.22.0", 501 | "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", 502 | "babel-plugin-transform-es2015-block-scoping": "6.26.0", 503 | "babel-plugin-transform-es2015-classes": "6.24.1", 504 | "babel-plugin-transform-es2015-computed-properties": "6.24.1", 505 | "babel-plugin-transform-es2015-destructuring": "6.23.0", 506 | "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", 507 | "babel-plugin-transform-es2015-for-of": "6.23.0", 508 | "babel-plugin-transform-es2015-function-name": "6.24.1", 509 | "babel-plugin-transform-es2015-literals": "6.22.0", 510 | "babel-plugin-transform-es2015-modules-amd": "6.24.1", 511 | "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", 512 | "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", 513 | "babel-plugin-transform-es2015-modules-umd": "6.24.1", 514 | "babel-plugin-transform-es2015-object-super": "6.24.1", 515 | "babel-plugin-transform-es2015-parameters": "6.24.1", 516 | "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", 517 | "babel-plugin-transform-es2015-spread": "6.22.0", 518 | "babel-plugin-transform-es2015-sticky-regex": "6.24.1", 519 | "babel-plugin-transform-es2015-template-literals": "6.22.0", 520 | "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", 521 | "babel-plugin-transform-es2015-unicode-regex": "6.24.1", 522 | "babel-plugin-transform-regenerator": "6.26.0" 523 | } 524 | }, 525 | "babel-preset-es2017": { 526 | "version": "6.24.1", 527 | "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", 528 | "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", 529 | "dev": true, 530 | "requires": { 531 | "babel-plugin-syntax-trailing-function-commas": "6.22.0", 532 | "babel-plugin-transform-async-to-generator": "6.24.1" 533 | } 534 | }, 535 | "babel-register": { 536 | "version": "6.26.0", 537 | "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", 538 | "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", 539 | "dev": true, 540 | "requires": { 541 | "babel-core": "6.26.0", 542 | "babel-runtime": "6.26.0", 543 | "core-js": "2.5.1", 544 | "home-or-tmp": "2.0.0", 545 | "lodash": "4.17.4", 546 | "mkdirp": "0.5.1", 547 | "source-map-support": "0.4.18" 548 | } 549 | }, 550 | "babel-runtime": { 551 | "version": "6.26.0", 552 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 553 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 554 | "dev": true, 555 | "requires": { 556 | "core-js": "2.5.1", 557 | "regenerator-runtime": "0.11.0" 558 | }, 559 | "dependencies": { 560 | "regenerator-runtime": { 561 | "version": "0.11.0", 562 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", 563 | "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", 564 | "dev": true 565 | } 566 | } 567 | }, 568 | "babel-template": { 569 | "version": "6.26.0", 570 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 571 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 572 | "dev": true, 573 | "requires": { 574 | "babel-runtime": "6.26.0", 575 | "babel-traverse": "6.26.0", 576 | "babel-types": "6.26.0", 577 | "babylon": "6.18.0", 578 | "lodash": "4.17.4" 579 | } 580 | }, 581 | "babel-traverse": { 582 | "version": "6.26.0", 583 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 584 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 585 | "dev": true, 586 | "requires": { 587 | "babel-code-frame": "6.26.0", 588 | "babel-messages": "6.23.0", 589 | "babel-runtime": "6.26.0", 590 | "babel-types": "6.26.0", 591 | "babylon": "6.18.0", 592 | "debug": "2.6.9", 593 | "globals": "9.18.0", 594 | "invariant": "2.2.2", 595 | "lodash": "4.17.4" 596 | } 597 | }, 598 | "babel-types": { 599 | "version": "6.26.0", 600 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 601 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 602 | "dev": true, 603 | "requires": { 604 | "babel-runtime": "6.26.0", 605 | "esutils": "2.0.2", 606 | "lodash": "4.17.4", 607 | "to-fast-properties": "1.0.3" 608 | } 609 | }, 610 | "babylon": { 611 | "version": "6.18.0", 612 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 613 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", 614 | "dev": true 615 | }, 616 | "balanced-match": { 617 | "version": "1.0.0", 618 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 619 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 620 | "dev": true 621 | }, 622 | "brace-expansion": { 623 | "version": "1.1.8", 624 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 625 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 626 | "dev": true, 627 | "requires": { 628 | "balanced-match": "1.0.0", 629 | "concat-map": "0.0.1" 630 | } 631 | }, 632 | "chalk": { 633 | "version": "1.1.3", 634 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 635 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 636 | "dev": true, 637 | "requires": { 638 | "ansi-styles": "2.2.1", 639 | "escape-string-regexp": "1.0.5", 640 | "has-ansi": "2.0.0", 641 | "strip-ansi": "3.0.1", 642 | "supports-color": "2.0.0" 643 | } 644 | }, 645 | "concat-map": { 646 | "version": "0.0.1", 647 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 648 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 649 | "dev": true 650 | }, 651 | "convert-source-map": { 652 | "version": "1.5.0", 653 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", 654 | "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", 655 | "dev": true 656 | }, 657 | "core-js": { 658 | "version": "2.5.1", 659 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", 660 | "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", 661 | "dev": true 662 | }, 663 | "debug": { 664 | "version": "2.6.9", 665 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 666 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 667 | "dev": true, 668 | "requires": { 669 | "ms": "2.0.0" 670 | } 671 | }, 672 | "detect-indent": { 673 | "version": "4.0.0", 674 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 675 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", 676 | "dev": true, 677 | "requires": { 678 | "repeating": "2.0.1" 679 | } 680 | }, 681 | "escape-string-regexp": { 682 | "version": "1.0.5", 683 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 684 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 685 | "dev": true 686 | }, 687 | "esutils": { 688 | "version": "2.0.2", 689 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 690 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 691 | "dev": true 692 | }, 693 | "globals": { 694 | "version": "9.18.0", 695 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 696 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 697 | "dev": true 698 | }, 699 | "has-ansi": { 700 | "version": "2.0.0", 701 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 702 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 703 | "dev": true, 704 | "requires": { 705 | "ansi-regex": "2.1.1" 706 | } 707 | }, 708 | "home-or-tmp": { 709 | "version": "2.0.0", 710 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", 711 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", 712 | "dev": true, 713 | "requires": { 714 | "os-homedir": "1.0.2", 715 | "os-tmpdir": "1.0.2" 716 | } 717 | }, 718 | "invariant": { 719 | "version": "2.2.2", 720 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 721 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", 722 | "dev": true, 723 | "requires": { 724 | "loose-envify": "1.3.1" 725 | } 726 | }, 727 | "is-finite": { 728 | "version": "1.0.2", 729 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 730 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 731 | "dev": true, 732 | "requires": { 733 | "number-is-nan": "1.0.1" 734 | } 735 | }, 736 | "js-tokens": { 737 | "version": "3.0.2", 738 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 739 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 740 | "dev": true 741 | }, 742 | "jsesc": { 743 | "version": "1.3.0", 744 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 745 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", 746 | "dev": true 747 | }, 748 | "json5": { 749 | "version": "0.5.1", 750 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 751 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 752 | "dev": true 753 | }, 754 | "lodash": { 755 | "version": "4.17.4", 756 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 757 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 758 | "dev": true 759 | }, 760 | "loose-envify": { 761 | "version": "1.3.1", 762 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 763 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", 764 | "dev": true, 765 | "requires": { 766 | "js-tokens": "3.0.2" 767 | } 768 | }, 769 | "minimatch": { 770 | "version": "3.0.4", 771 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 772 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 773 | "dev": true, 774 | "requires": { 775 | "brace-expansion": "1.1.8" 776 | } 777 | }, 778 | "minimist": { 779 | "version": "0.0.8", 780 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 781 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 782 | "dev": true 783 | }, 784 | "mkdirp": { 785 | "version": "0.5.1", 786 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 787 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 788 | "dev": true, 789 | "requires": { 790 | "minimist": "0.0.8" 791 | } 792 | }, 793 | "ms": { 794 | "version": "2.0.0", 795 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 796 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 797 | "dev": true 798 | }, 799 | "number-is-nan": { 800 | "version": "1.0.1", 801 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 802 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 803 | "dev": true 804 | }, 805 | "os-homedir": { 806 | "version": "1.0.2", 807 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 808 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 809 | "dev": true 810 | }, 811 | "os-tmpdir": { 812 | "version": "1.0.2", 813 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 814 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 815 | "dev": true 816 | }, 817 | "path-is-absolute": { 818 | "version": "1.0.1", 819 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 820 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 821 | "dev": true 822 | }, 823 | "private": { 824 | "version": "0.1.8", 825 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 826 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 827 | "dev": true 828 | }, 829 | "regenerate": { 830 | "version": "1.3.3", 831 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", 832 | "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", 833 | "dev": true 834 | }, 835 | "regenerator-runtime": { 836 | "version": "0.10.5", 837 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", 838 | "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", 839 | "dev": true 840 | }, 841 | "regenerator-transform": { 842 | "version": "0.10.1", 843 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", 844 | "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", 845 | "dev": true, 846 | "requires": { 847 | "babel-runtime": "6.26.0", 848 | "babel-types": "6.26.0", 849 | "private": "0.1.8" 850 | } 851 | }, 852 | "regexpu-core": { 853 | "version": "2.0.0", 854 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", 855 | "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", 856 | "dev": true, 857 | "requires": { 858 | "regenerate": "1.3.3", 859 | "regjsgen": "0.2.0", 860 | "regjsparser": "0.1.5" 861 | } 862 | }, 863 | "regjsgen": { 864 | "version": "0.2.0", 865 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", 866 | "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", 867 | "dev": true 868 | }, 869 | "regjsparser": { 870 | "version": "0.1.5", 871 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", 872 | "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", 873 | "dev": true, 874 | "requires": { 875 | "jsesc": "0.5.0" 876 | }, 877 | "dependencies": { 878 | "jsesc": { 879 | "version": "0.5.0", 880 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 881 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 882 | "dev": true 883 | } 884 | } 885 | }, 886 | "repeating": { 887 | "version": "2.0.1", 888 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 889 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 890 | "dev": true, 891 | "requires": { 892 | "is-finite": "1.0.2" 893 | } 894 | }, 895 | "slash": { 896 | "version": "1.0.0", 897 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 898 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", 899 | "dev": true 900 | }, 901 | "source-map": { 902 | "version": "0.5.7", 903 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 904 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 905 | "dev": true 906 | }, 907 | "source-map-support": { 908 | "version": "0.4.18", 909 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 910 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 911 | "dev": true, 912 | "requires": { 913 | "source-map": "0.5.7" 914 | } 915 | }, 916 | "strip-ansi": { 917 | "version": "3.0.1", 918 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 919 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 920 | "dev": true, 921 | "requires": { 922 | "ansi-regex": "2.1.1" 923 | } 924 | }, 925 | "supports-color": { 926 | "version": "2.0.0", 927 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 928 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 929 | "dev": true 930 | }, 931 | "to-fast-properties": { 932 | "version": "1.0.3", 933 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 934 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 935 | "dev": true 936 | }, 937 | "trim-right": { 938 | "version": "1.0.1", 939 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 940 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 941 | "dev": true 942 | } 943 | } 944 | } 945 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "smart-contract-test-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "truffle.js", 6 | "directories": { 7 | "test": "test" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "babel-polyfill": "^6.26.0", 16 | "babel-preset-es2015": "^6.24.0", 17 | "babel-preset-es2017": "^6.22.0", 18 | "babel-register": "^6.26.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/fundRaise.js: -------------------------------------------------------------------------------- 1 | const FundRaise = artifacts.require('./FundRaise.sol') 2 | 3 | contract('FundRaise', function ([owner, donor]) { 4 | let fundRaise 5 | 6 | beforeEach('setup contract for each test', async function () { 7 | fundRaise = await FundRaise.new(owner) 8 | }) 9 | 10 | it('has an owner', async function () { 11 | assert.equal(await fundRaise.owner(), owner) 12 | }) 13 | 14 | it('accepts funds', async function () { 15 | await fundRaise.sendTransaction({ value: 1e+18, from: donor }) 16 | 17 | const fundRaiseAddress = await fundRaise.address 18 | assert.equal(web3.eth.getBalance(fundRaiseAddress).toNumber(), 1e+18) 19 | }) 20 | 21 | it('is able to pause and unpause fund activity', async function () { 22 | await fundRaise.pause() 23 | 24 | try { 25 | await fundRaise.sendTransaction({ value: 1e+18, from: donor }) 26 | assert.fail() 27 | } catch (error) { 28 | assert(error.toString().includes('invalid opcode'), error.toString()) 29 | } 30 | const fundRaiseAddress = await fundRaise.address 31 | assert.equal(web3.eth.getBalance(fundRaiseAddress).toNumber(), 0) 32 | 33 | await fundRaise.unpause() 34 | await fundRaise.sendTransaction({ value: 1e+18, from: donor }) 35 | assert.equal(web3.eth.getBalance(fundRaiseAddress).toNumber(), 1e+18) 36 | }) 37 | 38 | it('permits owner to receive funds', async function () { 39 | await fundRaise.sendTransaction({ value: 1e+18, from: donor }) 40 | const ownerBalanceBeforeRemovingFunds = web3.eth.getBalance(owner).toNumber() 41 | 42 | const fundRaiseAddress = await fundRaise.address 43 | assert.equal(web3.eth.getBalance(fundRaiseAddress).toNumber(), 1e+18) 44 | 45 | await fundRaise.removeFunds() 46 | 47 | assert.equal(web3.eth.getBalance(fundRaiseAddress).toNumber(), 0) 48 | assert.isAbove(web3.eth.getBalance(owner).toNumber(), ownerBalanceBeforeRemovingFunds) 49 | }) 50 | }) 51 | -------------------------------------------------------------------------------- /truffle.js: -------------------------------------------------------------------------------- 1 | require('babel-register') 2 | require('babel-polyfill') 3 | 4 | module.exports = { 5 | networks: { 6 | development: { 7 | host: "localhost", 8 | port: 8545, 9 | network_id: "*" // Match any network id 10 | } 11 | } 12 | }; 13 | --------------------------------------------------------------------------------