Compare commits

...

1682 Commits

Author SHA1 Message Date
e4a8a5533e 2.5.0-rc.0 2020-01-24 14:56:29 -03:00
88dc1ca6fc Reorder functions to prevent shadowing warning 2020-01-24 14:56:17 -03:00
1e0f07751e Implementation of an address Enumerable Set (#2061)
* Drafted Enumerable.sol.

* Drafted test framework.

* Tweaked the tests to follow oz structure.

* Coded EnumerableSet.

* Moved EnumerableSet to `utils`.

* Fixed linting.

* Improved comments.

* Tweaked contract description.

* Renamed struct to AddressSet.

* Relaxed version pragma to 0.5.0

* Removed events.

* Revert on useless operations.

* Small comment.

* Created AddressSet factory method.

* Failed transactions return false.

* Transactions now return false on failure.

* Remove comments from mock

* Rename mock functions

* Adapt tests to code style, use test-helpers

* Fix bug in remove, improve tests.

* Add changelog entry

* Add entry on Utils doc

* Add optimization for removal of last slot

* Update docs

* Fix headings of utilities documentation

Co-authored-by: Nicolás Venturo <nicolas.venturo@gmail.com>
2020-01-24 14:50:24 -03:00
73abd54cbe Made private methods internal to allow for overriding (#2027)
* Made private methods internal to allow for overriding

* Revert package.lock changes.

* Make _move private again

* Expose the ERC1820 registry address

* Add changelog entry

Co-authored-by: Nicolás Venturo <nicolas.venturo@gmail.com>
2020-01-23 16:35:21 -03:00
7d7cbcad14 Fix/improve revert reason #1727 (#2018)
* adding mock contacts, test code

* adding changes to ERC721.sol per @frangio's comments on original PR #1943

* fix solhint warnings

* Update contracts/token/ERC721/ERC721.sol

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* same revert wording per @frangio's review suggestion

* per @frangio's feedback, changing the inline assembly to accomplish: we want to ignore the first 4 bytes of content, so we should read the length and decrease it by 4, then take the memory location and add 4 to it, then store the new length at the new memory location, then that is the new byte array that we want.

* change revert msg assembly per PR comment by @frangio

* unify revert msg in test code

* fix some failed tests, wording change

* Update contracts/token/ERC721/ERC721.sol

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update contracts/token/ERC721/ERC721.sol

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* fix test case, revert without reason

* fix 'ERC721ReceiverRevertsMock: Transaction rejected by receiver'

* style change per review by @frangio

* fix revert reason forwarding

* remove duplicate contracts/mocks/ERC721ReceiverRevertsMock.sol per review https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2018\#issuecomment-574381034

* Add changelog entry

* Fix tests

* Make tests more clear

Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
Co-authored-by: Nicolás Venturo <nicolas.venturo@gmail.com>
2020-01-23 16:33:09 -03:00
e493fb3e95 Add 'available since' notes. Fixes #2054 2020-01-23 15:26:25 -03:00
8c40a5b275 Create2 feature pending tasks (#2013)
* Add Create2 library (#1744)

* feat(contracts): Add Create2 library to use create2 evm opcode

* Upgrade sol-coverage

* Add changelog entry

* Update comments and code style

* Remove create2 helper

* Fix linter error

* Fix truffle dependency

* Fix linter error

* refactor(Create2): Remove _deploy internal function

* test(Create2): test Create2 with inline assembly code

* fix(Create2): Check address returned form create2 instead of codesize of created contract

* refactor(Create2):Add revert reason when Create2 deploy fails (#2062)

* fix merge with master

* fix test

Co-authored-by: Augusto Lemble <me@augustol.com>
2020-01-23 15:08:54 -03:00
d6698c3bfb Copy docsite landing to readme (#2058)
* Copy docsite landing to readme

* Fix code sample

* Apply suggestions from code review

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update code sample

Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
2020-01-23 13:36:21 -03:00
b1e811430a Upgrade test-environment dependency 2020-01-20 16:32:42 -03:00
06983a2075 add note suggesting reentrancy post (#2059) 2020-01-20 16:02:49 -03:00
d037217769 Update README (#2056)
* Update README to use releases-stability URL

Change https://docs.openzeppelin.com/contracts/api-stability to https://docs.openzeppelin.com/contracts/releases-stability (even though it redirects)

* Update README to include CLI as dev env

Add OpenZeppelin CLI to list of development environments

* Update README to use releases-stability URL

Change https://docs.openzeppelin.com/contracts/api-stability to https://docs.openzeppelin.com/contracts/releases-stability (even though it redirects)
2020-01-16 14:51:06 -03:00
410e4f8ab9 Fix link to GSN overview (#2053)
* Fix link to GSN overview

* Update contracts/GSN/README.adoc

Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
2020-01-15 14:44:09 -03:00
54d2aec232 issue#1980 (#2038)
* issue#1980

* fix public to external
2020-01-14 16:18:19 -03:00
d006a750ee Bump eslint-plugin-import from 2.18.2 to 2.20.0 (#2051)
Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.18.2 to 2.20.0.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.18.2...v2.20.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-14 11:54:34 -03:00
5376e5d349 Bump @openzeppelin/gsn-helpers from 0.2.1 to 0.2.3 (#2052)
Bumps [@openzeppelin/gsn-helpers](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers) from 0.2.1 to 0.2.3.
- [Release notes](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers/releases)
- [Commits](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers/compare/v0.2.1...v0.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-14 11:54:17 -03:00
e5805c4979 Bump openzeppelin-docs-utils from dc7ce30 to f6b5291 (#2050)
Bumps [openzeppelin-docs-utils](https://github.com/OpenZeppelin/docs-utils) from `dc7ce30` to `f6b5291`.
- [Release notes](https://github.com/OpenZeppelin/docs-utils/releases)
- [Commits](dc7ce3006b...f6b5291a2e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-14 11:54:01 -03:00
73cbd6a38b fix typo 2020-01-13 15:52:29 -03:00
7014d94108 Fix doc links 2020-01-13 13:46:53 -03:00
62651e8147 Docs overhaul (#2045)
* Reorder navbar

* Adapt content to new docsite structure, add links

* Fix list

* fix list

* Apply suggestions from code review

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update index.adoc

Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
2020-01-13 13:44:34 -03:00
f9650b4cb8 Remove .gitkeep as it's not needed. (#2046) 2020-01-07 17:18:28 -03:00
249b5e9a4b Bump mocha from 6.2.2 to 7.0.0 (#2042)
Bumps [mocha](https://github.com/mochajs/mocha) from 6.2.2 to 7.0.0.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v6.2.2...v7.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-06 14:42:13 -03:00
67a71519d3 [Security] Bump handlebars from 4.1.2 to 4.5.3 (#2033)
Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.1.2 to 4.5.3. **This update includes a security fix.**
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](https://github.com/wycats/handlebars.js/compare/v4.1.2...v4.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-26 17:41:23 -03:00
ccdeca65a1 make stalebot ignore prs tagged "meta" 2019-12-19 19:13:42 -03:00
fbddf5ba5b Test common case first (#2023) 2019-12-16 16:21:06 -03:00
cf0e71b4ed Update crowdsales.adoc fix invalid conversion (#2026)
Code sample for MyCrowdsaleDeployer causes TypeError:
```
browser/MyCrowdsaleDeployer.sol:21:13: TypeError: Invalid type for argument in function call. 
Invalid implicit conversion from address to contract IERC20 requested.
            address(token)            // the token
            ^------------^
```
Change: 
```solidity
address(token)   // the token
```
To:
```solidity
token   // the token
```

Reported by community member in the forum: https://forum.openzeppelin.com/t/invalid-implicit-conversion-from-address-to-contract-ierc20-requested/1937
2019-12-16 16:15:03 -03:00
73a5903789 Update README.adoc 2019-12-10 15:57:14 -03:00
5d47aa85bc Correct documentation for isContract check (#2017)
* Correct documentation for isContract check

* Update Address.sol

* Update Address.sol

* add missing newline before asciidoc list
2019-12-10 13:14:18 -03:00
3eaf50005f disable oz cli interactivity in compile script 2019-12-09 16:55:17 -03:00
aec642c5ab [Security] Bump eslint-utils from 1.4.0 to 1.4.3 (#2019)
Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.4.0 to 1.4.3. **This update includes security fixes.**
- [Release notes](https://github.com/mysticatea/eslint-utils/releases)
- [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.4.0...v1.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-09 16:25:16 -03:00
d0d5c2835e Bump openzeppelin-docs-utils from 8e3fa25 to dc7ce30 (#2021)
Bumps [openzeppelin-docs-utils](https://github.com/OpenZeppelin/docs-utils) from `8e3fa25` to `dc7ce30`.
- [Release notes](https://github.com/OpenZeppelin/docs-utils/releases)
- [Commits](8e3fa25573...dc7ce3006b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-09 15:44:01 -03:00
2593457503 rename docs-utils dependency 2019-12-03 12:28:01 -03:00
b56e00eb61 Fix documentation previews in pull requests (#2015)
* migrate to openzeppelin-docs-preview script

* update netlify configuration

* update docs-preview-script dependency

* remove old docs directory from gitignore

* update oz-docs script for live reload

* update oz-docs scripts to latest

* replace child_process.execFileSync with spawnSync

* update oz-docs-preview
2019-12-02 19:13:13 -03:00
0c644cc470 [Security] Bump eslint-utils from 1.4.0 to 1.4.3 (#2012)
Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.4.0 to 1.4.3. **This update includes security fixes.**
- [Release notes](https://github.com/mysticatea/eslint-utils/releases)
- [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.4.0...v1.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-02 10:22:38 -03:00
5f92adc2e7 Migrate from truffle to test-environment (#2007)
* Sketch

* Migrate all tests to test-env

* Finish migration to test-env

* Add config

* Work on GSN tests

* Migrate to newer test-env version and loader syntax

* Add GSN setup

* Finish test-env migration

* Setup coverage using test-env

* Migrate to npm package

* Fix package.json

* Add compile step to CI

* Add comment on coverage setup

* Remove dependency on @truffle/contract

* Fix package-lock merge

* Fix linter errors

* Upgrade test-environment, depend locally on ganche-coverage

* Improve coverage script

* Improve sign.js API

* Move accounts destructuring to describe block

* Switch to prebuilt ethereumjs-vm package

* Upgrade test-enviroment version

* use workspace in circleci config

* remove unnecessary npx
2019-11-28 15:46:42 -03:00
ca6a5dc8a2 Changes ERC777 external functions to public for allowing overrides #1994 (#2001)
* Changes ERC777 external functions to public for allowing overrides #1994

* Changes ERC777 external functions to public for allowing overrides (#1994)
2019-11-27 19:29:05 -03:00
cc0f89e331 Bump nodemon from 1.19.4 to 2.0.1 (#2008)
Bumps [nodemon](https://github.com/remy/nodemon) from 1.19.4 to 2.0.1.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v1.19.4...v2.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-25 12:20:22 -03:00
28b95ef5be ReentrancyGuard gas optimization (#1996)
* Improve gas efficiency of reentrancyGuard

* Add changelog entry

* Fix ReentrancyGuard test
2019-11-23 20:44:45 -03:00
4237eea7d8 Bump @openzeppelin/test-helpers from 0.5.3 to 0.5.4 (#1999)
Bumps [@openzeppelin/test-helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers) from 0.5.3 to 0.5.4.
- [Release notes](https://github.com/OpenZeppelin/openzeppelin-test-helpers/releases)
- [Changelog](https://github.com/OpenZeppelin/openzeppelin-test-helpers/blob/master/CHANGELOG.md)
- [Commits](https://github.com/OpenZeppelin/openzeppelin-test-helpers/compare/v0.5.3...v0.5.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-20 20:21:17 -03:00
95e54173e9 Update MerkleProof.sol (#1997) 2019-11-19 20:13:22 -03:00
8e980480aa Fix broken crossreference links (#2005)
* Bump solidity-docgen from 0.3.11 to 0.3.13

Bumps solidity-docgen from 0.3.11 to 0.3.13.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* fix broken crossreference links
2019-11-19 17:41:51 -03:00
49042f2b1a feat: add baseTokenURI to ERC721Metadata (#1970)
* feat: add baseTokenURI

* fix: tests

* chore: dev notation

* chore: changelog

* chore: typo

* Remove extra getters, return empty URI by default

* Update docs

* Rename baseTokenURI to baseURI

* Roll back visibility change of tokenURI

* Update changelog entry

* Version setBaseURI docs

* Improve internal names and comments

* Fix compilation errors

* Add an external getter for baseURI
2019-11-15 20:22:37 -03:00
714f13df7e fix docs template to include only own items 2019-11-15 18:53:20 -03:00
33047ffddc Update ReentrancyGuard for Istanbul Hard Fork (#1992)
* Update ReentrancyGuard for Istanbul Hard Fork

Changes:
Added L37, `_guardCounter = 1;`

Rationale:
The planned _Istanbul Hard Fork_ will implement [EIP 2200](e4d4ea348e/EIPS/eip-2200.md), which implements "net gas metering" for `sstore` operations. If the final value of `_guardCounter` is unchanged relative to the original value of it, a gas refund will be applied and charges for changing the value of `_guardCounter` will effectively not exist. This ends up being cheaper than the current implementation ONLY AFTER Istanbul. Before Istanbul, the added line actually ends up costing more gas.

Note that if `_guardCounter` is `0` initially, the initial cost and subsequent refund will both be larger than if `_guardCounter` is `1` initially. Although in both cases, the net gas cost (`gasCost - gasRefund`) are equal, it's better in terms of cost to have both the gas cost and refund smaller, as there is some limit to the percentage of a gas refund that can actually be realized.

* Update CHANGELOG.md

Added note for change to ReentrancyGuard.sol

* Update ReentrancyGuard.sol

* Update CHANGELOG.md
2019-11-13 14:54:15 -03:00
f90700f3f1 add detail to deprecation notice 2019-11-12 17:52:38 -03:00
ab43553f0f add explicit npm ci in prepare-docs 2019-11-11 17:50:56 -03:00
9cac50e428 Bump ethereumjs-util from 6.1.0 to 6.2.0 (#1988)
Bumps [ethereumjs-util](https://github.com/ethereumjs/ethereumjs-util) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/ethereumjs/ethereumjs-util/releases)
- [Changelog](https://github.com/ethereumjs/ethereumjs-util/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ethereumjs/ethereumjs-util/compare/v6.1.0...v6.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-11 16:40:01 -03:00
bc84ea450c Bump solidity-docgen from 0.3.9 to 0.3.11 (#1989)
Bumps solidity-docgen from 0.3.9 to 0.3.11.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-11 15:42:13 -03:00
3608fb4ae9 Bump truffle from 5.0.42 to 5.0.44 (#1990)
Bumps [truffle](https://github.com/trufflesuite/truffle) from 5.0.42 to 5.0.44.
- [Release notes](https://github.com/trufflesuite/truffle/releases)
- [Commits](https://github.com/trufflesuite/truffle/compare/truffle@5.0.42...truffle@5.0.44)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-11 15:19:54 -03:00
aa73460a8d Update CHANGELOG.md 2019-11-07 23:09:32 -03:00
a20408a9e0 Update CHANGELOG.md 2019-11-07 23:09:18 -03:00
81b1e48107 typo fixes (#1983)
"standard also bring" -> "standard also brings"
"killer feature are" -> "killer feature is"
2019-11-05 15:38:17 -03:00
207f315231 tweak formatting of changelog 2019-11-05 12:59:50 -03:00
c3f2ed8168 tweak instructions on how to upgrade from beta 2019-11-01 15:46:09 -03:00
f4c5ce3009 Add section on how to upgrade from 2.4-beta (#1981)
* add how to upgrade from 2.4-beta

* add how-to

* Update CHANGELOG.md
2019-11-01 15:10:46 -03:00
5b2de262fd Made _burn internal instead of private (#1908) 2019-10-31 19:57:38 -03:00
21d19dccb5 bump solidity-docgen from 0.3.7 to 0.3.9 2019-10-31 12:16:07 -03:00
19a6590306 bump solidity-docgen from 0.3.5 to 0.3.7 2019-10-30 13:33:35 -03:00
8e3563968f add explanation of drafts category 2019-10-30 12:57:19 -03:00
d839c24e4b Merge branch 'release-v2.4.0' 2019-10-29 17:56:10 -03:00
cdf655f770 2.4.0 2019-10-29 17:44:30 -03:00
f5c95cc5cb add changes to minimum solidity compiler version in the changelog
(cherry picked from commit bddbbe99a7)
2019-10-29 17:41:55 -03:00
bddbbe99a7 add changes to minimum solidity compiler version in the changelog 2019-10-29 17:40:43 -03:00
c4bb7b7bb9 remove beta notice 2019-10-29 17:23:48 -03:00
1eb80ddb22 move changelog entry to new features section
(cherry picked from commit 2d30415373)
2019-10-29 17:21:37 -03:00
feaf051fef added feature availability info to documentation
(cherry picked from commit 9113335cb3)
2019-10-29 17:21:29 -03:00
4c997ea09e make PullPayment.withdrawPaymentsWithGas external
(cherry picked from commit 76a1d7a3cd)
2019-10-29 17:21:23 -03:00
1c220e175d Forward all gas on PullPayment withdrawal (#1976)
* Add withdrawWithGas

* Improve docs

* Add changelog entry

* Update contracts/payment/PullPayment.sol

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Remove repeated comment

* Update changelog entry

* Fix inline docs

* Fix changelog formatting

(cherry picked from commit d6e10ab786)
2019-10-29 17:21:17 -03:00
ab4d43ce14 fix script for preparing contracts package
(cherry picked from commit eaee98f227)
2019-10-29 17:21:08 -03:00
875f179fab Update access-control.adoc (#1968)
Fixed:
-DetailedERC20 in the constructor
-minters should be _minters
-New example instead of rename function

(cherry picked from commit 5c8fa0f0cf)
2019-10-29 17:20:59 -03:00
e84e191322 Fixes dead link in Readme. (#1969)
(cherry picked from commit fcd77a4a37)
2019-10-29 17:20:48 -03:00
a1b3de68c1 fix pr reference number for Address.sendValue
(cherry picked from commit 5702a84429)
2019-10-29 17:20:42 -03:00
b0dbe0fc59 Transfer replacement (#1962)
* Add Address.sendEther

* Add documentation to sendEther

* Add changelog entry

* Rename sendEther to sendValue

(cherry picked from commit 8d166f3e35)
2019-10-29 17:20:18 -03:00
6efbee609e GSN renaming (#1963)
* Merge GSNBouncerBase into GSNRecipient

* Remove emtpy implementations for _pre and _post

* Rename bouncers to recipients

* Rename bouncers documentation to strategies

* Rewrite guides and docstrings to use the strategy naming scheme

* Address review comments

* Apply suggestions from code review

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* change wording of docs

(cherry picked from commit aae95db4e0)
2019-10-29 17:18:26 -03:00
21d014d481 Improve PullPayment docs (#1965)
* Improve PullPayment docs

* Reword escrow note

* Update contracts/payment/PullPayment.sol

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>
(cherry picked from commit 9e19d90cd9)
2019-10-29 17:18:26 -03:00
7c31b98e6c Remove SignatureBouncer from draft docs (#1964)
(cherry picked from commit 53f1b11668)
2019-10-29 17:18:26 -03:00
bfbbf4dfe7 change 'visibility' class to 'item-kind' in docs template
(cherry picked from commit 13b85c6848)
2019-10-29 17:18:26 -03:00
86bfdfce96 add indicators for events and modifiers (#1954)
(cherry picked from commit eda29e06b2)
2019-10-29 17:18:26 -03:00
9df4f7971e Design tweaks to documentation template (#1937)
* switch index to show arg names

* add index separators

* add classes to style variable type and name

* add class for inherited part of index

* use inheritedItems in contracts template

* refactor template to use explicit if and each

(cherry picked from commit 5d6a040fc3)
2019-10-29 17:18:26 -03:00
f5fe378cc6 update solidity-docgen
(cherry picked from commit e557a54ce7)
2019-10-29 17:18:26 -03:00
5183c6a307 Show visibility (#1945)
(cherry picked from commit 77ae18f12f)
2019-10-29 17:13:03 -03:00
80125a1be5 fix gsn api links
(cherry picked from commit c866522833)
2019-10-29 17:12:07 -03:00
4f4d305784 Fix the GSNBouncerERC20Fee token decimals to 18 (#1929)
* fix erc20 fee token decimals to 18

* lint

* Update contracts/GSN/bouncers/GSNBouncerERC20Fee.sol

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* change location of hardcoded decimals for clarity

* remove mention of decimals from docs

* remove trailing whitespace from guide

(cherry picked from commit b8ccf8e0f1)
2019-10-29 17:11:26 -03:00
8026a8ae2e GSNSignatureBouncer fix (#1920)
* GSNSignatureBoucer does not accept zero address

* Linting code.

* Update contracts/GSN/bouncers/GSNBouncerSignature.sol

Makes sense!

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* Update test/GSN/GSNBouncerSignature.test.js

ok!

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* Add zero address constant from OZ test Helpers

* revert prettier formatting

(cherry picked from commit f9a94788fb)
2019-10-29 17:11:14 -03:00
f9f0eec359 abcoathup GSN Bouncers review (#1916)
* Fix typo

* Replace pseudo code contracts with sample code

* Update GSN Bouncers text

* More text changes

* Update with latest code and remove reference to allowance

* Capitalize Custom Bouncer

* Update docs/modules/ROOT/pages/gsn-bouncers.adoc

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update gsn-bouncers.adoc with Antora cross reference

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Revert to handling msg.sender msg.data differently

* Change by default to simplest implementation

* Change signing to include signature for GSNBouncerSignature

* Reword summary of what is in the guide

* Remove "The" from before `GSNBouncer...`

* Fix code snippet markdown

* Change to API references to xref:api

* Remove code from How it works sections

* Explain 1:1 exchange rate

* Change transaction request to relayed call

* Minor fixes

* Add info to Custom Bouncers

* Typo

* Minor fixes

* reorder sentence based on review gsn-bouncers.adoc

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Improve wording of signing of relayed call parameters by trusted signer

(cherry picked from commit 18473d0100)
2019-10-29 17:11:04 -03:00
53edc70ab6 Remove extra parenthesis (#1919)
(cherry picked from commit 54182bf31c)
2019-10-29 17:10:52 -03:00
f615fd1a46 Fix bouncer signature tests (#1915)
* Fix bouncer signature tests

* Update GSNBouncerSignature.test.js

(cherry picked from commit 19a41980a1)
2019-10-29 17:09:30 -03:00
dd2094b86e Make _msgSender() payable (#1913)
(cherry picked from commit 52dc14c368)
2019-10-29 17:08:19 -03:00
c247a21cb5 Make ERC1820 address constant (#1912)
(cherry picked from commit 6148abb1b1)
2019-10-29 17:08:11 -03:00
a3603b9098 Remove SignatureBouncer contract
(cherry picked from commit c876254457)
2019-10-29 17:07:58 -03:00
7d1c5eb71b Improve IRelayRecipient no-impl note
(cherry picked from commit e855ca450a)
2019-10-29 17:07:21 -03:00
dba4d5023d Merge GSNContext into GSNRecipient (#1906)
* Merge GSNContext into GSNRecipient

* Update GSNRecipient.test.js

* Update GSNRecipient.sol

* Make GSNRecipient inherit from Context

(cherry picked from commit 1efa9f6281)
2019-10-29 17:07:06 -03:00
5f1d8e19da Improve GSN documentation (#1900)
* Improve IRelayRecipient docs

* Fix link

* Update IRelayHub docs to the docsite format

* Update IRelayRecipient docs to the dociste format

* Fix typo

* Improve GSN readme

* Fix link

* Update GSNRecipient docs

* Apply suggestions from code review

Co-Authored-By: Andrew B Coathup <28278242+abcoathup@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: Andrew B Coathup <28278242+abcoathup@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: Andrew B Coathup <28278242+abcoathup@users.noreply.github.com>
(cherry picked from commit d864228624)
2019-10-29 17:06:59 -03:00
89a90fda4c fix strikethrough style in docs
(cherry picked from commit 5274b3d84c)
2019-10-29 17:06:50 -03:00
a71047952d Replace confirmRelayedCall with approveRelayedCall (#1904)
* Replace confirmRelayedCall with approveRelayedCall

* Update gsn-bouncers.adoc

* Update deprecated enums

(cherry picked from commit 9c733a7bf8)
2019-10-29 17:06:40 -03:00
23dc15898f Bump required compiler version for Address (#1898)
(cherry picked from commit 4e527a20a5)
2019-10-29 17:06:21 -03:00
bd51db5bf0 Syncing naming of value and amount. (#1895)
(cherry picked from commit 5d183d0efe)
2019-10-29 17:06:06 -03:00
25b82b0db8 Update Context.sol (#1892)
Fix typos in instructions

(cherry picked from commit 2836b066c9)
2019-10-29 17:05:37 -03:00
a0e74cd756 Fix links to bouncers guide
(cherry picked from commit d8a25d17aa)
2019-10-29 17:05:25 -03:00
99dca07f5f Fix link to basic guide
(cherry picked from commit 5ec7204948)
2019-10-29 17:05:12 -03:00
00947dee3d fix link
(cherry picked from commit 1e42749847)
2019-10-29 17:05:00 -03:00
2d30415373 move changelog entry to new features section 2019-10-29 16:58:39 -03:00
9113335cb3 added feature availability info to documentation 2019-10-29 16:58:17 -03:00
76a1d7a3cd make PullPayment.withdrawPaymentsWithGas external 2019-10-29 16:40:18 -03:00
d6e10ab786 Forward all gas on PullPayment withdrawal (#1976)
* Add withdrawWithGas

* Improve docs

* Add changelog entry

* Update contracts/payment/PullPayment.sol

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Remove repeated comment

* Update changelog entry

* Fix inline docs

* Fix changelog formatting
2019-10-28 20:06:02 -03:00
eaee98f227 fix script for preparing contracts package 2019-10-28 19:31:21 -03:00
4757f1c1c9 Bump @openzeppelin/gsn-helpers from 0.2.0 to 0.2.1 (#1974)
Bumps [@openzeppelin/gsn-helpers](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers) from 0.2.0 to 0.2.1.
- [Release notes](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers/releases)
- [Commits](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers/compare/v0.2.0...v0.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-28 17:17:20 -03:00
c58d5cdfed Bump @openzeppelin/gsn-provider from 0.1.8 to 0.1.9 (#1973)
Bumps [@openzeppelin/gsn-provider](https://github.com/OpenZeppelin/openzeppelin-gsn-provider) from 0.1.8 to 0.1.9.
- [Release notes](https://github.com/OpenZeppelin/openzeppelin-gsn-provider/releases)
- [Commits](https://github.com/OpenZeppelin/openzeppelin-gsn-provider/commits/v0.1.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-28 15:05:25 -03:00
5c8fa0f0cf Update access-control.adoc (#1968)
Fixed:
-DetailedERC20 in the constructor
-minters should be _minters
-New example instead of rename function
2019-10-28 13:35:26 -03:00
fcd77a4a37 Fixes dead link in Readme. (#1969) 2019-10-28 13:22:01 -03:00
5702a84429 fix pr reference number for Address.sendValue 2019-10-28 13:20:17 -03:00
91992eed0a Bump truffle from 5.0.41 to 5.0.42 (#1971)
Bumps [truffle](https://github.com/trufflesuite/truffle) from 5.0.41 to 5.0.42.
- [Release notes](https://github.com/trufflesuite/truffle/releases)
- [Commits](https://github.com/trufflesuite/truffle/compare/truffle@5.0.41...truffle@5.0.42)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-28 13:12:09 -03:00
f6f918c64c Bump eslint-config-standard from 11.0.0 to 14.1.0 (#1975)
Bumps [eslint-config-standard](https://github.com/standard/eslint-config-standard) from 11.0.0 to 14.1.0.
- [Release notes](https://github.com/standard/eslint-config-standard/releases)
- [Changelog](https://github.com/standard/eslint-config-standard/blob/master/CHANGELOG.md)
- [Commits](https://github.com/standard/eslint-config-standard/compare/v11.0.0...v14.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-28 11:47:36 -03:00
8d166f3e35 Transfer replacement (#1962)
* Add Address.sendEther

* Add documentation to sendEther

* Add changelog entry

* Rename sendEther to sendValue
2019-10-25 15:53:16 -03:00
aae95db4e0 GSN renaming (#1963)
* Merge GSNBouncerBase into GSNRecipient

* Remove emtpy implementations for _pre and _post

* Rename bouncers to recipients

* Rename bouncers documentation to strategies

* Rewrite guides and docstrings to use the strategy naming scheme

* Address review comments

* Apply suggestions from code review

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* change wording of docs
2019-10-25 13:36:56 -03:00
9e19d90cd9 Improve PullPayment docs (#1965)
* Improve PullPayment docs

* Reword escrow note

* Update contracts/payment/PullPayment.sol

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>
2019-10-24 19:04:50 -03:00
53f1b11668 Remove SignatureBouncer from draft docs (#1964) 2019-10-24 17:42:06 -03:00
3e1519ac1e Delete unused function (#1961) 2019-10-22 19:39:20 -03:00
2c11ed59fa Safe Casting Library from uint256 to uintXX (#1926)
* Include Safe Casting Library with complete and exhaustive test-suite.

* linting test file.

* Typo in SafeCast import statement

* Update test/utils/SafeCast.test.js

* Rename `castUXX` to `toUintXX` from suggestion

* Tackling the quick and easy suggestions regarding error string improvements etc.

* typo and changelog update.

* Improve SafeCast tests

* Update test/utils/SafeCast.test.js

* Update test/utils/SafeCast.test.js

* incorrect import

* add SafeCast to docs site

* Update CHANGELOG.md

* Update SafeCast.sol
2019-10-22 13:59:11 -03:00
bfca6bd379 Bump eslint-plugin-node from 8.0.1 to 10.0.0 (#1958)
Bumps [eslint-plugin-node](https://github.com/mysticatea/eslint-plugin-node) from 8.0.1 to 10.0.0.
- [Release notes](https://github.com/mysticatea/eslint-plugin-node/releases)
- [Commits](https://github.com/mysticatea/eslint-plugin-node/compare/v8.0.1...v10.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-21 14:59:36 -03:00
85a081ff36 Bump eslint-plugin-standard from 3.1.0 to 4.0.1 (#1957)
Bumps [eslint-plugin-standard](https://github.com/standard/eslint-plugin-standard) from 3.1.0 to 4.0.1.
- [Release notes](https://github.com/standard/eslint-plugin-standard/releases)
- [Commits](https://github.com/standard/eslint-plugin-standard/compare/v3.1.0...v4.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-21 14:54:32 -03:00
566519fd6b Bump nodemon from 1.19.3 to 1.19.4 (#1959)
Bumps [nodemon](https://github.com/remy/nodemon) from 1.19.3 to 1.19.4.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v1.19.3...v1.19.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-21 14:37:40 -03:00
8077ae890e Bump @openzeppelin/test-helpers from 0.5.1 to 0.5.3 (#1960)
Bumps [@openzeppelin/test-helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers) from 0.5.1 to 0.5.3.
- [Release notes](https://github.com/OpenZeppelin/openzeppelin-test-helpers/releases)
- [Changelog](https://github.com/OpenZeppelin/openzeppelin-test-helpers/blob/master/CHANGELOG.md)
- [Commits](https://github.com/OpenZeppelin/openzeppelin-test-helpers/compare/v0.5.1...v0.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-21 14:29:01 -03:00
13b85c6848 change 'visibility' class to 'item-kind' in docs template 2019-10-18 14:57:15 -03:00
eda29e06b2 add indicators for events and modifiers (#1954) 2019-10-17 21:01:29 -03:00
5d6a040fc3 Design tweaks to documentation template (#1937)
* switch index to show arg names

* add index separators

* add classes to style variable type and name

* add class for inherited part of index

* use inheritedItems in contracts template

* refactor template to use explicit if and each
2019-10-17 18:42:31 -03:00
e557a54ce7 update solidity-docgen 2019-10-17 18:24:32 -03:00
b62c677420 Update truffle (#1953) 2019-10-17 17:22:42 -03:00
8836fac06f Bump eslint from 4.19.1 to 6.5.1 (#1948)
* Bump eslint from 4.19.1 to 6.5.1

Bumps [eslint](https://github.com/eslint/eslint) from 4.19.1 to 6.5.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v4.19.1...v6.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* better ignore rules for eslint

* set ecmascript version to support object spread operator
2019-10-15 17:14:22 -03:00
77ae18f12f Show visibility (#1945) 2019-10-15 13:24:13 -03:00
285ccecd66 Bump eslint-plugin-node from 5.2.1 to 8.0.1 (#1946)
Bumps [eslint-plugin-node](https://github.com/mysticatea/eslint-plugin-node) from 5.2.1 to 8.0.1.
- [Release notes](https://github.com/mysticatea/eslint-plugin-node/releases)
- [Commits](https://github.com/mysticatea/eslint-plugin-node/compare/v5.2.1...v8.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-15 13:22:59 -03:00
59933b77ce Bump truffle from 5.0.39 to 5.0.40 (#1947)
Bumps [truffle](https://github.com/trufflesuite/truffle) from 5.0.39 to 5.0.40.
- [Release notes](https://github.com/trufflesuite/truffle/releases)
- [Commits](https://github.com/trufflesuite/truffle/compare/truffle@5.0.39...truffle@5.0.40)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-15 13:22:41 -03:00
2ec317ac03 doc.fix(test/TESTING.md): few words and mention Truffle (#1944) 2019-10-11 15:34:07 -03:00
3274d9db00 Upgrade to @openzeppelin/test-helpers@0.5.1 (#1942) 2019-10-10 19:38:23 -03:00
c866522833 fix gsn api links 2019-10-09 15:56:33 -03:00
4edd0ee799 doc:fix unit test directory name (#1939) 2019-10-09 13:30:11 -03:00
45befe6e95 Bump solhint from 2.1.0 to 2.3.0 (#1936)
* Bump solhint from 2.1.0 to 2.3.0

Bumps [solhint](https://github.com/protofire/solhint) from 2.1.0 to 2.3.0.
- [Release notes](https://github.com/protofire/solhint/releases)
- [Changelog](https://github.com/protofire/solhint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/protofire/solhint/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Fix linter
2019-10-08 16:08:07 -03:00
40647ad04a Bump eslint-config-standard from 10.2.1 to 11.0.0 (#1935)
Bumps [eslint-config-standard](https://github.com/standard/eslint-config-standard) from 10.2.1 to 11.0.0.
- [Release notes](https://github.com/standard/eslint-config-standard/releases)
- [Changelog](https://github.com/standard/eslint-config-standard/blob/master/CHANGELOG.md)
- [Commits](https://github.com/standard/eslint-config-standard/compare/v10.2.1...v11.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-07 19:56:59 -03:00
38502031ae Bump concurrently from 4.1.2 to 5.0.0 (#1934)
Bumps [concurrently](https://github.com/kimmobrunfeldt/concurrently) from 4.1.2 to 5.0.0.
- [Release notes](https://github.com/kimmobrunfeldt/concurrently/releases)
- [Commits](https://github.com/kimmobrunfeldt/concurrently/compare/v4.1.2...v5.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-07 19:56:38 -03:00
445d8987f3 Bump @openzeppelin/gsn-helpers from 0.1.9 to 0.2.0 (#1933)
Bumps [@openzeppelin/gsn-helpers](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers) from 0.1.9 to 0.2.0.
- [Release notes](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers/releases)
- [Commits](https://github.com/OpenZeppelin/openzeppelin-gsn-helpers/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-07 19:56:19 -03:00
fa1cbc435f Bump eslint-plugin-promise from 3.8.0 to 4.2.1 (#1932)
Bumps [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise) from 3.8.0 to 4.2.1.
- [Release notes](https://github.com/xjamundx/eslint-plugin-promise/releases)
- [Changelog](https://github.com/xjamundx/eslint-plugin-promise/blob/master/CHANGELOG.md)
- [Commits](https://github.com/xjamundx/eslint-plugin-promise/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-07 19:56:10 -03:00
111cde942f Update dependencies + configure Dependabot (#1931)
* update dependencies with npm update

* add dependabt config

* change dependabot schedule to weekly

* configure dependabot to increase package.json versions
2019-10-07 19:28:43 -03:00
b8ccf8e0f1 Fix the GSNBouncerERC20Fee token decimals to 18 (#1929)
* fix erc20 fee token decimals to 18

* lint

* Update contracts/GSN/bouncers/GSNBouncerERC20Fee.sol

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* change location of hardcoded decimals for clarity

* remove mention of decimals from docs

* remove trailing whitespace from guide
2019-10-07 19:21:28 -03:00
fba77596ce delete extraneous file 2019-10-04 16:15:25 -03:00
f9a94788fb GSNSignatureBouncer fix (#1920)
* GSNSignatureBoucer does not accept zero address

* Linting code.

* Update contracts/GSN/bouncers/GSNBouncerSignature.sol

Makes sense!

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* Update test/GSN/GSNBouncerSignature.test.js

ok!

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* Add zero address constant from OZ test Helpers

* revert prettier formatting
2019-10-04 12:39:56 -03:00
18473d0100 abcoathup GSN Bouncers review (#1916)
* Fix typo

* Replace pseudo code contracts with sample code

* Update GSN Bouncers text

* More text changes

* Update with latest code and remove reference to allowance

* Capitalize Custom Bouncer

* Update docs/modules/ROOT/pages/gsn-bouncers.adoc

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update gsn-bouncers.adoc with Antora cross reference

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Revert to handling msg.sender msg.data differently

* Change by default to simplest implementation

* Change signing to include signature for GSNBouncerSignature

* Reword summary of what is in the guide

* Remove "The" from before `GSNBouncer...`

* Fix code snippet markdown

* Change to API references to xref:api

* Remove code from How it works sections

* Explain 1:1 exchange rate

* Change transaction request to relayed call

* Minor fixes

* Add info to Custom Bouncers

* Typo

* Minor fixes

* reorder sentence based on review gsn-bouncers.adoc

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Improve wording of signing of relayed call parameters by trusted signer
2019-09-24 21:18:46 -05:00
54182bf31c Remove extra parenthesis (#1919) 2019-09-17 11:52:06 -03:00
5ab6b99607 refactor(ERC165Checker) replaced assembly code with staticcall() (#1829)
* refactor(ERC165Checker) replaced assembly code with function

* returned false if result.length==0

* trigger ci

* updated ERC165Checker to return false if result.length < 32
2019-09-11 19:11:43 -03:00
b33b906b6e Update Counter.sol (#1917)
* Update Counter.sol

Added a comment in increment to make this more visible to not use SafeMath here.

* Update Counters.sol
2019-09-11 14:11:31 -03:00
19a41980a1 Fix bouncer signature tests (#1915)
* Fix bouncer signature tests

* Update GSNBouncerSignature.test.js
2019-09-11 13:51:07 -03:00
6f8e672f3f Gas optimizations in Ownable and Secondary contracts #1905 (#1910) 2019-09-09 18:47:05 -03:00
52dc14c368 Make _msgSender() payable (#1913) 2019-09-09 12:24:46 -03:00
6148abb1b1 Make ERC1820 address constant (#1912) 2019-09-06 17:16:02 -03:00
a2ffe21aa2 Revert to working truffle version 2019-09-06 16:26:26 -03:00
c876254457 Remove SignatureBouncer contract 2019-09-06 16:02:09 -03:00
681db1d330 Upgrade Solidity compiler version 2019-09-06 15:59:17 -03:00
d9accb63fc Update circle base image 2019-09-06 15:57:36 -03:00
72ccec4e6c Update dependencies 2019-09-06 15:47:19 -03:00
54ee1c7ff5 Fixing really minor typo (#1911) 2019-09-04 11:45:49 -03:00
e855ca450a Improve IRelayRecipient no-impl note 2019-08-30 17:54:08 -03:00
1efa9f6281 Merge GSNContext into GSNRecipient (#1906)
* Merge GSNContext into GSNRecipient

* Update GSNRecipient.test.js

* Update GSNRecipient.sol

* Make GSNRecipient inherit from Context
2019-08-30 17:18:42 -03:00
d864228624 Improve GSN documentation (#1900)
* Improve IRelayRecipient docs

* Fix link

* Update IRelayHub docs to the docsite format

* Update IRelayRecipient docs to the dociste format

* Fix typo

* Improve GSN readme

* Fix link

* Update GSNRecipient docs

* Apply suggestions from code review

Co-Authored-By: Andrew B Coathup <28278242+abcoathup@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: Andrew B Coathup <28278242+abcoathup@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: Andrew B Coathup <28278242+abcoathup@users.noreply.github.com>
2019-08-29 18:57:17 -03:00
5274b3d84c fix strikethrough style in docs 2019-08-29 16:40:44 -03:00
9c733a7bf8 Replace confirmRelayedCall with approveRelayedCall (#1904)
* Replace confirmRelayedCall with approveRelayedCall

* Update gsn-bouncers.adoc

* Update deprecated enums
2019-08-29 11:58:52 -03:00
52c30edab8 Bump mixin-deep from 1.3.1 to 1.3.2 (#1901)
Bumps [mixin-deep](https://github.com/jonschlinkert/mixin-deep) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/jonschlinkert/mixin-deep/releases)
- [Commits](https://github.com/jonschlinkert/mixin-deep/compare/1.3.1...1.3.2)

Signed-off-by: dependabot[bot] <support@github.com>
2019-08-28 12:59:15 -03:00
ba0fd11f52 Renamed symbols as as a part of Issue#1148 (#1891) 2019-08-26 21:00:06 -03:00
635a381460 Fix Part 1 : added tests for getApproved (#1820)
* added tests for getApproved

* added tests for getApproved

* added to changelog

* Corrected some linting issues

* Removed unneccrary tests as pointed out here: b49c2de086 (r307927816)

* Correct Changelog character

* Update ERC721.behavior.js
2019-08-26 20:59:22 -03:00
4e527a20a5 Bump required compiler version for Address (#1898) 2019-08-26 20:12:46 -03:00
92b2e2800a Bump eslint-utils from 1.3.1 to 1.4.2 (#1899)
Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.3.1 to 1.4.2.
- [Release notes](https://github.com/mysticatea/eslint-utils/releases)
- [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.3.1...v1.4.2)

Signed-off-by: dependabot[bot] <support@github.com>
2019-08-26 16:11:23 -03:00
5d183d0efe Syncing naming of value and amount. (#1895) 2019-08-26 12:24:43 -03:00
188a5fd700 Minor refactoring of the .circleci config.yaml (#1885)
* Adding in "<<: *defaults" under "coverage"

* Refactoring by capturing similar setup commands into single alias

* Reverting changes, I am not certain exactly how to refactor these setup steps, but at least the &default refactor can be made.
2019-08-23 11:39:31 +02:00
2836b066c9 Update Context.sol (#1892)
Fix typos in instructions
2019-08-22 09:19:26 +02:00
d8a25d17aa Fix links to bouncers guide 2019-08-18 23:48:53 +02:00
5ec7204948 Fix link to basic guide 2019-08-18 23:33:58 +02:00
1e42749847 fix link 2019-08-18 22:38:37 +02:00
c77181c976 2.4.0-beta.2 2019-08-16 21:31:54 +02:00
f9a306bbdf remove release date 2019-08-16 21:31:34 +02:00
c0042cd9d0 Merge branch 'master' into release-v2.4.0 2019-08-16 21:25:51 +02:00
49eae91441 change double quotes for single quotes 2019-08-16 21:24:10 +02:00
6a01da193e add release push command 2019-08-16 21:14:13 +02:00
3e33066dde 2.4.0-beta.1 2019-08-16 21:12:05 +02:00
5bcaf7a2d8 remove release date that was wrong 2019-08-16 21:11:07 +02:00
0fa5270f7e fix changelog editing script 2019-08-16 21:09:20 +02:00
226c6bd8f1 Remove SignatureBouncer from drafts (#1879)
* Remove SignatureBouncer

* Update changelog entry

* Fix coverage

* Update CHANGELOG.md
2019-08-16 15:49:13 -03:00
89d07a2492 Update gsn.adoc 2019-08-16 20:38:56 +02:00
f1c7e63923 Add docs to GSN API (#1887)
* move gsn link

* change underscore to dash

* add content to gsn api ref

* change link of GSN announcement

* Update contracts/GSN/bouncers/GSNBouncerERC20Fee.sol

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* fix crossreference to gsn guide
2019-08-16 20:30:37 +02:00
79c30f96aa Remove intro from gsn guide (#1886)
* Remove intro from gsn guide

We are moving the intro to the top-level in the docsite, and focusing this guide into writing gsn-enabled contracts.

* Update docs/modules/ROOT/pages/gsn.adoc

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update gsn.adoc
2019-08-16 20:08:56 +02:00
9fdc91758d add note in api ref about unreleased features 2019-08-16 20:06:35 +02:00
18d7e24a2c rename docsite script to docs and update docs setup description 2019-08-16 20:03:49 +02:00
29e20ff9bf change underscore to dash 2019-08-16 19:32:04 +02:00
b2b31b2551 remove unstructured storage from GSNContext (#1881) 2019-08-15 19:33:41 -03:00
2b3aa0d220 Update gsn_advanced.adoc (#1884)
* Update gsn_advanced.adoc

Line 15 - where it says, "prevent malicious users from spending the transactions subsidy", with transactions subsidy, is it supposed to be possessive "transaction's subsidy" or is the plural in the wrong place "transaction subsidies"?

Line 176 - where it says "or it is not allowed to spend that amount". Is IT referring to the sender/person or the tx? If IT refers to a person, then change to "or they are not allowed..." for gender neutral.

Line 213 - Where it says, "Please not how the gas cost estimation", a verb is missing, please what?

* Update gsn_advanced.adoc

Apply suggestions by Amy
2019-08-15 20:25:06 +02:00
f2c3af4d0f update note about gsn being under development 2019-08-15 19:09:30 +02:00
ee5fdaf639 remove comment that made bash fail
(cherry picked from commit 5c19876fbf)
2019-08-15 19:01:30 +02:00
5c19876fbf remove comment that made bash fail 2019-08-15 19:00:48 +02:00
3ae589ebc5 add option to change prerelease suffix 2019-08-15 19:00:37 +02:00
588b810256 2.4.0-beta.0 2019-08-15 18:50:55 +02:00
6ae0915c3d add option to change prerelease suffix 2019-08-15 18:46:05 +02:00
cab26fd046 Update .editorconfig 2019-08-14 17:59:38 +02:00
d1158ea68c GSN compatibility (#1880)
* switch to using Context internally

* add context import

* Add smoke test to make sure enabling GSN support works

* Update test/GSN/ERC721GSNRecipientMock.test.js

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Upgrade truffle

* add missing awaits

* Revert "Upgrade truffle"

This reverts commit f9b0ba9019.
2019-08-14 14:21:38 +02:00
f095b62856 Fixing instructions by correcting instruction to (#1877)
> openzeppelin-solidity@2.3.0 lint /home/luiserebii/github/openzeppelin-solidity
> npm run lint:js && npm run lint:sol

> openzeppelin-solidity@2.3.0 lint:js /home/luiserebii/github/openzeppelin-solidity
> eslint .

> openzeppelin-solidity@2.3.0 lint:sol /home/luiserebii/github/openzeppelin-solidity
> solhint --max-warnings 0 "contracts/**/*.sol", alongside some minor grammatical corrections
2019-08-12 14:46:29 -03:00
0ec1d761aa Initial GSN support (beta) (#1844)
* Add base Context contract

* Add GSNContext and tests

* Add RelayHub deployment to tests

* Add RelayProvider integration, complete GSNContext tests

* Switch dependency to openzeppelin-gsn-provider

* Add default txfee to provider

* Add basic signing recipient

* Sign more values

* Add comment clarifying RelayHub's msg.data

* Make context constructors internal

* Rename SigningRecipient to GSNRecipientSignedData

* Add ERC20Charge recipients

* Harcode RelayHub address into GSNContext

* Fix Solidity linter errors

* Run server from binary, use gsn-helpers to fund it

* Migrate to published @openzeppelin/gsn-helpers

* Silence false-positive compiler warning

* Use GSN helper assertions

* Rename meta-tx to gsn, take out of drafts

* Merge ERC20 charge recipients into a single one

* Rename GSNRecipients to Bouncers

* Add GSNBouncerUtils to decouple the bouncers from GSNRecipient

* Add _upgradeRelayHub

* Store RelayHub address using unstructored storage

* Add IRelayHub

* Add _withdrawDeposits to GSNRecipient

* Add relayHub version to recipient

* Make _acceptRelayedCall and _declineRelayedCall easier to use

* Rename GSNBouncerUtils to GSNBouncerBase, make it IRelayRecipient

* Improve GSNBouncerBase, make pre and post sender-protected and optional

* Fix GSNBouncerERC20Fee, add tests

* Add missing GSNBouncerSignature test

* Override transferFrom in __unstable__ERC20PrimaryAdmin

* Fix gsn dependencies in package.json

* Rhub address slot reduced by 1

* Rename relay hub changed event

* Use released gsn-provider

* Run relayer with short sleep of 1s instead of 100ms

* update package-lock.json

* clear circle cache

* use optimized gsn-provider

* update to latest @openzeppelin/gsn-provider

* replace with gsn dev provider

* remove relay server

* rename arguments in approveFunction

* fix GSNBouncerSignature test

* change gsn txfee

* initialize development provider only once

* update RelayHub interface

* adapt to new IRelayHub.withdraw

* update @openzeppelin/gsn-helpers

* update relayhub singleton address

* fix helper name

* set up gsn provider for coverage too

* lint

* Revert "set up gsn provider for coverage too"

This reverts commit 8a7b5be5f9.

* remove unused code

* add gsn provider to coverage

* move truffle contract options back out

* increase gas limit for coverage

* remove unreachable code

* add more gas for GSNContext test

* fix test suite name

* rename GSNBouncerBase internal API

* remove onlyRelayHub modifier

* add explicit inheritance

* remove redundant event

* update name of bouncers error codes enums

* add basic docs page for gsn contracts

* make gsn directory all caps

* add changelog entry

* lint

* enable test run to fail in coverage
2019-08-12 13:30:03 -03:00
e9cd1b5b44 GSN Advanced guide Docs (#1878)
* GSN Advanced guide

* Tweaks

* Apply suggestions from code review
2019-08-12 12:21:37 -03:00
c771b2c8d5 add early failure to coverage script 2019-08-09 19:29:45 -03:00
3812bd8e6f fix indent_size in editorconfig 2019-08-09 19:20:52 -03:00
eeeb3a5be1 Typo in ERC20.sol (#1873)
Changed word from Destoys to Destroys in line number 220.
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol#L220

Need review. Thanks 👍
2019-08-09 15:10:06 -03:00
e59ded9134 Manually specify commit hash to codecov 2019-08-07 22:31:28 -03:00
1c1fa5d968 Silence false positive warning on preValidatePurchase (#1857) 2019-08-07 21:35:04 -03:00
0da886c9c4 Update ReentrancyGuard.sol (#1862)
Fix typo
2019-08-07 21:34:53 -03:00
3306cd1ece Fix codecov badge 2019-08-07 21:10:16 -03:00
08ce03f6c3 Add codecov badge 2019-08-07 21:09:31 -03:00
2a29f697bf Disable Travis in favor of Circle (#1866)
* replace readme badge

* remove travis config

* move to codecov

* add codecov config

* fix coverage running
2019-08-07 20:36:39 -03:00
18b57ca043 Merge GSN branch into master (#1867)
* GSN basics guide (#1847)

* Fix linter error

* Initial draft for basic GSN guide

* Add CustomerAcquisitonCost link

* Review 'gas costs' phrasing

* Rename relay to relayer

* Apply suggestions from code review

Co-Authored-By: Santiago Palladino <spalladino@gmail.com>

* Improve transition to contract usage explanation

* Improve payment section phrasing

* Apply suggestions from code review

Co-Authored-By: Andrew B Coathup <28278242+abcoathup@users.noreply.github.com>

* Apply more review suggestions

* Add code

* Add unreleased warning

* GSN Docs Tweaks (#1860)

* Adjusts links

* Adjustments

* Update gsn.adoc

Fix typo

* Adjusts copy and links for GSN guide (#1865)

* Adjusts copy and links

* Formats links

* Adds website link
2019-08-07 19:18:08 -03:00
0b7f1777ef Add npm install step to every circle job 2019-08-07 19:16:47 -03:00
0d1aec13ba CircleCI configuration tweaks (#1868)
* remove attach_workspace

* leave default working_directory

* use npm ci for installing deps

* rename dependencies job
2019-08-07 18:09:01 -03:00
bd1f2ededd Update Arrays.sol (#1863)
Fix typo
2019-08-07 16:35:17 -03:00
0ba85035cc Remove note from CircleCI config 2019-08-07 16:32:46 -03:00
04ddadc48f Add CircleCI configuration (#1841)
* Add circlci, remove .travis.yml. Fixes #1839.

* Fix circleci config

* Add slack notification

* Add circleci status

* Fix config.yml, we don't need separate truffle image and instances.

* Matches oz-sdk node version

* Seems node:10.13 doesn't work for CircleCI either

* Remove npm update in circleci

* CircleCI use package-lock.json as cache key and install only the lock version

* Add back travis.yml

* Rename job build to test

* CircleCI requires that job to be called build instead of test or build_and_test

* Fix the way to run jobs

* Fix CircleCI

* Change back to npm install

* Add workflow and split into tasks

* Add workspace

* Restore cache

* update readme circleci instructions

* make step name more accurate
2019-08-07 13:25:34 -03:00
be4b80a508 Install missing dependency 2019-07-30 17:03:28 -03:00
5d34dbecea Functions in SafeMath contract overloaded to accept custom error messages (#1828)
* Imporvement: functions in SafeMath contract overloaded to accept custom error messages.

* CHANGELOG updated, custom error messages added to ERC20, ERC721 and ERC777 for subtraction related exceptions.

* SafeMath overloads for 'add' and 'mul' removed.

* Error messages modified.

* Update CHANGELOG.md
2019-07-29 15:23:34 -03:00
377431bc4c Fix/add erc721 safe mint safe transfer from #1736 (#1816)
* added _safeTransferFrom function

* added safeMint functions

* added package-lock.json for consistency, don't know why it changes

* added initial suggestions/modifications

* change _safeTransferFrom to internal, reverted package-lock.json to original, and changed ERC721Pausable to override _transferFrom instead of transferFrom

* included tests for safeMint functions

* modified safeMint tests to be on ERC721Mock contract

* added safeMint to ERC721Mintable & respective test to ERC721MintBurn.behavior.js
2019-07-29 12:16:55 -03:00
571fa7f4e7 Fix linter error 2019-07-27 20:35:00 -03:00
b8c8308d77 Add @openzeppelin/contracts as alternative package name (#1840)
* Rename package and repository name from docs and scripts

* undo root package rename

* add @openzeppelin/contracts as subpackage with release automation

* synchronize @openzeppelin/contracts version

* remove private field from package.json

* make file patterns absolute

* change wording of a comment

* use a saner version script
2019-07-26 16:01:04 -03:00
e869b37d0b Update CODE_STYLE.md (#1842)
Add: Interface names should have a capital I prefix.
2019-07-26 10:04:45 -03:00
623c3c05c8 fix docsite script 2019-07-23 17:31:49 -03:00
9428bc9317 Edit access-control.adoc for Documentation / Website (#1834)
* add OwnableCautious with associated mock and tests

* extraneous comma removal and cleanup

* remove non-documentation changes from branch
2019-07-23 17:28:07 -03:00
509d0c997d Fix readme badges 2019-07-23 15:58:14 -03:00
90831c8970 Squash merge of branch docs-v2.x into master 2019-07-23 15:54:12 -03:00
2187fae154 Update index.adoc (#1835)
Change URLs to openzeppelin.com
2019-07-23 12:56:02 -03:00
1b350c5837 Update bug_report.md (#1836)
Update URLs and names to OpenZeppelin and OpenZeppelin Contracts
2019-07-23 12:52:27 -03:00
5d2af083cf Update access-control.adoc (#1837)
Update URL to openzeppelin.com
2019-07-23 12:52:05 -03:00
eae306f259 Rebrand readme (#1832)
* update readme with new branding

* update readme text with new branding and links

* add newer link to api stability document
2019-07-22 18:54:13 -03:00
c5c0e22c89 fix docsite build script 2019-07-17 17:33:51 -03:00
7552af95e4 migrate content to format for new docs site
Squashed commit of the following:

commit fcf35eb806100de300bd9803ce3150dde1ecc424
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 17 17:16:04 2019 -0300

    remove all docsite dependency

commit eeaee9a9d43d70704f6ab17b5126ddbd52b93a50
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 17 17:15:23 2019 -0300

    update solidity-docgen

commit f021ff951829ea0c155186749819403c6b76e803
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 17 17:05:06 2019 -0300

    update docsite script for new setup

commit ff887699d381cfbbe3acf1f1c0de8e22b58480f3
Merge: c938aa1d 84f85a41
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 17 16:46:46 2019 -0300

    Merge branch 'master' into antora

commit c938aa1d9ed05ac83a34e2cebd8353f8331ad6d6
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jul 16 18:24:29 2019 -0300

    make component name shorter

commit 5bbd6931e02cbbd8864c82655ad0f390ceead5f3
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 20:16:17 2019 -0300

    add all info to docs templates

commit 39682c4515d7cf0f0368ed557f50d2709174208a
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 20:13:49 2019 -0300

    fix npm docsite script

commit 7ae46bd4a0437abf66150d54d05adf46e3de2cab
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 18:48:05 2019 -0300

    convert inline docs to asciidoc

commit cfdfd3dee4b4bf582fde22c8cb6e17a603d6e0c8
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 17:34:52 2019 -0300

    add missing contract names in readmes

commit 15b6a2f9bfb546cf1d3bf4f104278b118bf1b3f4
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 17:16:47 2019 -0300

    fix script path

commit 80d82b909f9460d1450d401f00b3f309da506b29
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 17:13:53 2019 -0300

    update version of solidity-docgen

commit a870b6c607b9c2d0012f8a60a4ed1a1c8b7e8ebd
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 17:03:53 2019 -0300

    add nav generation of api ref

commit 069cff4a25b83752650b54b86d85608c2f547e5e
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed Jul 10 16:32:14 2019 -0300

    initial migration to asciidoc and new docgen version

commit 55216eed0a6551da913c8d1da4b2a0d0d3faa1a8
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jun 25 20:39:35 2019 -0300

    add basic api doc example

commit 0cbe50ce2173b6d1d9a698329d91220f58822a53
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jun 25 19:31:31 2019 -0300

    add sidebars

commit 256fc942845307258ac9dc25aace48117fa10f79
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jun 25 15:22:38 2019 -0300

    add page titles

commit f4d0effa70e1fc0662729863e8ee72a8821bc458
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jun 25 15:19:41 2019 -0300

    add contracts index file

commit b73b06359979f7d933df7f2b283c50cb1c31b2a0
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jun 25 15:14:52 2019 -0300

    fix header levels

commit fb57d9b820f09a1b7c04eed1a205be0e45866cac
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jun 25 15:11:47 2019 -0300

    switch format to preferred asciidoctor format

commit 032181d8804137332c71534753929d080a31a71f
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue Jun 25 15:05:38 2019 -0300

    initialize antora component and convert docs to asciidoc
2019-07-17 17:16:47 -03:00
84f85a410f Bump lodash from 4.17.11 to 4.17.14 (#1818)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.14.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.14)

Signed-off-by: dependabot[bot] <support@github.com>
2019-07-15 16:46:35 -03:00
f13d140ba7 Update crowdsales.md (#1821)
Correct typo: 
2 * 0.5e18 = 10^18 = 1e18
2019-07-15 13:33:36 -03:00
d95ca12415 Update crowdsales.md (#1822)
Change reference to Tokens documentation
Fix typo `CROWDALE_ADDRESS` to `CROWDSALE_ADDRESS`

Resolve compilation errors in sample contracts:
* Change `address wallet` to `address payable wallet` in multiple sample contracts
* Change `ERC20 token` to `IERC20 token` in multiple sample contracts
* Reorder inheritance of crowdsales to prevent error: "Linearization of inheritance graph impossible" in multiple sample contracts
* Change `startTime` to constructor parameter `openingTime`
2019-07-15 13:33:16 -03:00
136710cdd4 Bump lodash.merge from 4.6.1 to 4.6.2 (#1819)
Bumps [lodash.merge](https://github.com/lodash/lodash) from 4.6.1 to 4.6.2.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2019-07-11 11:40:10 -03:00
b084f42029 Update ERC20.sol (#1815)
Fix typo
2019-07-10 18:08:22 -03:00
cdccf5ed21 add missing hex digit
fixes #1814
2019-07-08 16:27:11 -03:00
0282c3608d Using extcodehash instead of extcodesize for less gas (#1802)
* Using extcodehash instead of extcodesize for less gas

`extcodehash` uses less gas then `extcodesize`. You can tell which address is a contract by the hash (see EIP-1052).

* Fix

* Add explainer

* Update Address.sol

* add changelog entry
2019-07-08 13:41:55 -03:00
c9f328ef66 Fix Typo (#1808) 2019-06-25 12:46:38 -03:00
489d2e85f1 Replace chai.should with chai.expect (#1780)
* changed exxpect to expect wherever applicable

* Merged with latest branch

* Updated merkleTree helper to latest master branch

* Made linting fixes

* Fix for test build

* updated for Coverage

* Updated Address.test.js

* Undo package-lock changes.
2019-06-24 17:40:05 -03:00
852e11c2db New guides (#1792)
* Improved tokens guide, add ERC777.

* Fix typo.

* Add release schedule and api stability.

* Add erc20 supply guide.

* Revamp get started

* Add Solidity version to examples

* Update access control guide.

* Add small disclaimer to blog guides

* Update tokens guide.

* Update docs/access-control.md

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update docs/access-control.md

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Update docs/access-control.md

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Apply suggestions from code review

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Apply suggestions from code review

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Documentation: Typos and add npm init -y to setup instructions (#1793)

* Fix typos in GameItem ERC721 sample contract

* Add npm init -y to create package.json

* Address review comments.
2019-06-24 17:16:50 -03:00
79346123ea Fix Typo (#1801)
Fixing typo in comment line 9
2019-06-18 21:08:08 -03:00
1e584e4957 Fix errors in ERC777 docstrings (#1797) 2019-06-13 12:55:03 -03:00
d9d1082247 Change uint to uint256 (#1794) 2019-06-12 16:24:37 -03:00
f358a03043 20x performance for merkle tree lib (#1787)
* 20x performance for merkle tree lib

* add semicolon

* Update test/helpers/merkleTree.js

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>
2019-06-12 14:59:52 -03:00
8545c99fb1 fixed small typo in utilities.md (#1785) 2019-06-04 11:51:33 -03:00
08f8bf71d7 Simplification of SampleToken (#1734)
* Simplification and optimization of existing contracts #8888

* Simplification of SimpleToken

* This is the fixed Simplification

* My bad I'm playing around with this git stuff, should be correct now

* add missing parenthesis
2019-06-04 10:22:20 -03:00
31c366af67 Update README doc links (#1784) 2019-06-04 00:52:40 -03:00
b95d7e7f8a Add a simple wrapper for address. (#1773)
* Updated code style to no more than120 characters per line.

* Unify code comments style with Doxygen-style tags.

* Fix the conflicts.

* Add a return value in the contract ERC20Burnable.

* A Add a wrapper function to change type of address to address payable.

* U Modify Address utils.

* A Add test case for Address.

* U Modify code style in ERC20Burnable.

* Add changelog entry.

* Improved dev docs.
2019-05-31 13:51:58 -03:00
96e4950742 Upgrade solhint to 2.1.0 (#1781)
* Upgrade solhint to 2.1.0

* Use compiler-version ^0.5.0
2019-05-30 13:07:02 -03:00
c23c63f9e5 Fix typo in guide. 2019-05-29 12:41:44 -03:00
a2c5659faa Bump extend from 3.0.1 to 3.0.2 (#1777)
Bumps [extend](https://github.com/justmoon/node-extend) from 3.0.1 to 3.0.2. **This update includes security fixes.**
- [Release notes](https://github.com/justmoon/node-extend/releases)
- [Changelog](https://github.com/justmoon/node-extend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/justmoon/node-extend/compare/v3.0.1...v3.0.2)
2019-05-29 12:37:40 -03:00
984468b583 Create GUIDELINES.md from wiki content. (#1776)
* Create GUIDELINES.md from wiki content.

* Remove ARCHITECTURE.md
2019-05-28 22:05:49 -03:00
fbbff53528 Strings library (#1746)
* Feature Issue #1745

* Feature Issue #1745 remove whitespace in contract

* Feature Issue #1745 fix Solidity linter issues

* Feature Issue #1745 fix JS lint issues

* Update contracts/drafts/Strings.sol

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* Update contracts/drafts/Strings.sol

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* Update contracts/drafts/Strings.sol

Co-Authored-By: Nicolás Venturo <nicolas.venturo@gmail.com>

* Updates based on PR feedback

* Remove trailing whitespace

* Update tests based on @nventuro feedback

* Removed return name

* Rename length as suggested

* Rename temp variables in uint256ToString

* Renamed bytes variable to buffer

* Change concatenate to use abi.encodePacked

* Moved OraclizeAPI reference to unit256ToString

* Add emoji concat test

* Remove concatenate

* Remove concatenate from StringsMock and test

* Rename function to fromUint256

* Update StringsMock.sol
2019-05-27 13:31:09 -03:00
a83f680a63 Merge branch 'release-v2.3.0' 2019-05-27 13:09:19 -03:00
132e442c1f 2.3.0 2019-05-27 12:17:20 -03:00
a71c3bce32 Update test-helpers to v0.4.0. (#1770) 2019-05-24 13:36:15 -03:00
d957b880fa make naming in ERC777 clearer 2019-05-24 13:21:20 -03:00
602d9d9884 Fix spelling mistake in ERC20Burnable.sol (#1768) 2019-05-24 13:16:24 -03:00
fd3f2421b7 update openzeppelin-docsite dependency 2019-05-23 20:38:45 -03:00
c589256203 fix typos 2019-05-23 19:35:20 -03:00
d95f5e2e50 lint
(cherry picked from commit bd13be9174)
2019-05-23 18:24:33 -03:00
e41daba7b4 merge api docs changes
Squashed commit of the following:

commit 06243c3e8e86074ff8e9e3f22b7829a2c315d707
Merge: 991882ec 99373558
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 18:15:37 2019 -0300

    Merge branch 'api-docs' into api-docs-merge

commit 991882eca5bb8a3391995154bfb9d53d8a69cb4f
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 18:08:02 2019 -0300

    manually apply docs changes and renamings

commit fa1f6e97dd67a76c3cd828d0a5e19b4ac6c37acb
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 17:36:03 2019 -0300

    move functions to new order

commit 99373558e3af4905d29bc6f3f542ba93d28a24ab
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 16:23:40 2019 -0300

    add missing docs links

commit d180d6c36a6f5460e85473ee5a18992d1449a6ff
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 16:14:12 2019 -0300

    update solidity-docgen dependency

    fixes uri encoded links

commit faab0e50da91cd2f0a409e3ad32e2db127ad319a
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 16:05:03 2019 -0300

    update openzeppelin-docsite and solidity-docgen dependencies

    add visibility specifiers

commit ef305268bb2735e488e35d16819a4b432b3a35e3
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 23 15:36:45 2019 -0300

    Fix guide links.

commit 339b20dbfa2d5f6ea02e63c2f3fdcba0fe879c3c
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 23 13:37:51 2019 -0300

    Fix typos.

commit 6c7b97460578b9eea90b53c280454e361f8f0052
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:26:29 2019 -0300

    fix utilities guide links

commit 0e7692a8fd8516a11becc4121d77d792439600b1
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:23:19 2019 -0300

    update solidity-docgen dependency

commit ebb8a8651516ece21736c6c3b2577eb1b3487651
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:15:01 2019 -0300

    fix utilities guide links

commit 5ec47d62785e1d6e5f8e91edca58f2dc7f87d7a3
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:14:49 2019 -0300

    fix escrow docs ordering

commit cdcdc909b16f219a9a3272036b6a8f21e34b48ef
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 13:35:07 2019 -0300

    add wip notice

commit 987e2951ae93211c8c70c8288e30573555c57830
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 13:09:35 2019 -0300

    update openzeppelin-docsite dependency

    fixes links to old versions

commit b00d22c0affac2e2108df8b773dfa1706afcb44e
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 13:09:28 2019 -0300

    fix guide links

commit f112a9400c5e5ad495c8e0fdb972e26987b34244
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 20:42:37 2019 -0300

    update docsite

commit 68aacdd56a29e35a84f6732f9293612bbcaf7520
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 20:00:39 2019 -0300

    ERC20Capped

commit 4edce78bab2c6d140f3ea3f33db71e92ca4d8aaf
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 19:52:30 2019 -0300

    Unnecessary polish on token docs.

commit 2a4c91cf49c2736dc09c1c03cf383911def1a1b2
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 19:20:05 2019 -0300

    rename guides

commit 61dd818ea76d4c170c4ab175c6be0d6067d21a29
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 17:04:09 2019 -0300

    ERC1820 docs.

commit 77b5f0353123b76358dc6d86bdc646c86c9b0bea
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 16:17:34 2019 -0300

    Introspection and ERC165.

commit 76641a253b3b70279802c5134dd107532eea4b2c
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 17:59:53 2019 -0300

    update docgen

commit 7be98bc3fbd3566231f943f01b9acb58567d755b
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 17:23:50 2019 -0300

    update solidity-docgen

commit f7268e6e010f8ef9ac83df241a803f91efc08c0c
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 16:58:31 2019 -0300

    update docgen

commit 2a8c7a378e8962a5baeb334b2492815f05075f98
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 14:36:35 2019 -0300

    Util docs.

commit 327ae8ff45a1a523c7591bf4996c4a9b52d7ec7a
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 13:08:50 2019 -0300

    add missing drafts

commit 5e7f71335ac8423c0e363ae8c7ad9b2977f202f8
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:47:41 2019 -0300

    tweak ierc20 docs

commit cd0e86a0b712f74ffd406e072d4b1fbf4dd2c176
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:46:45 2019 -0300

    add some erc721 docs

commit e081184159417f71da14bc0fc110b7b11e29d75d
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:41:46 2019 -0300

    update docsite

commit 0beb75784022419d47123c2a9fe7a5f1eb87f9b2
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:22:27 2019 -0300

    correct drafts structure

commit 2e94b287c7cead7a6c0603205670566461c31abb
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 11:56:25 2019 -0300

    fix docsite-start script

commit 0fa4160484309d0851584fe57c0d81a3600977db
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 11:47:44 2019 -0300

    improve docsite start script (automatically watch docgen)

commit 9d571897cc03bee92035964cf7a2cfeda1e2f690
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 11:30:37 2019 -0300

    update solidity-docgen

commit 82980f5aefbdfb8a9815a3b7b0e88e970b65dd5d
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 19:15:13 2019 -0300

    edit docs for Secondary

commit 00d7a005b0530bee730b77a1b69a95f1b4ffe315
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 19:15:13 2019 -0300

    edit docs for ownable

commit b0c4c2bdf83eca5d4a71792daac603236733d46e
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 18:27:13 2019 -0300

    change title of Math section

commit deb788583f191780e55b7f673520eaf13a5c7e23
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 18:26:59 2019 -0300

    capitalization

commit f2bcf85d343ea4a0739fe22a77b1e22c2296ddea
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 18:26:06 2019 -0300

    edit docs for Pausable

commit 73ba0cf43dbb44c39c1bf2ee63ef9fe558faa919
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Sat May 18 19:08:06 2019 -0300

    Crypto docs.

commit 9d6fc6223f51cf2321b2e3217c512579654c3917
Merge: 7e21f8f7 9f1cec12
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Fri May 17 17:23:15 2019 -0300

    Merge branch 'api-docs-777' into api-docs

commit 9f1cec12e3351fb1b5fc0b59f5ded39928064a56
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Fri May 17 17:22:54 2019 -0300

    ERC777 done.

commit 7e21f8f7b6982d2f92df302cdf6ec62522d8ffff
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Fri May 17 16:39:47 2019 -0300

    add math docs

commit f18d1f17023b6e5b42ae04fc38aa1170e6863864
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 20:01:46 2019 -0300

    First draft of ERC777 docs.

commit 985c5d3053
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 19:14:32 2019 -0300

    Final draft for IERC777.

commit bf53f133d987b67f938a329e6d659ba3483aab0b
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 16 19:13:37 2019 -0300

    more work on ERC20 api docs

commit b7c250b7cb
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 17:08:47 2019 -0300

    Fix typo.

commit 197bbfbfc6
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 17:05:14 2019 -0300

    Initial draft of IERC777.

commit 7dc3b55161c860437a8f13a2ce5808b1c3dd70a2
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 16 11:58:32 2019 -0300

    add payment docs structure

commit da16fc4480
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 16:05:33 2019 -0300

    Initial ERC777 docstrings.

commit 9f6a7e35bd
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 15 22:13:17 2019 -0300

    partial pass through ERC20 docs

(cherry picked from commit 2f9ae975c8)
2019-05-23 18:24:31 -03:00
bd13be9174 lint 2019-05-23 18:20:36 -03:00
2f9ae975c8 merge api docs changes
Squashed commit of the following:

commit 06243c3e8e86074ff8e9e3f22b7829a2c315d707
Merge: 991882ec 99373558
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 18:15:37 2019 -0300

    Merge branch 'api-docs' into api-docs-merge

commit 991882eca5bb8a3391995154bfb9d53d8a69cb4f
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 18:08:02 2019 -0300

    manually apply docs changes and renamings

commit fa1f6e97dd67a76c3cd828d0a5e19b4ac6c37acb
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 17:36:03 2019 -0300

    move functions to new order

commit 99373558e3af4905d29bc6f3f542ba93d28a24ab
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 16:23:40 2019 -0300

    add missing docs links

commit d180d6c36a6f5460e85473ee5a18992d1449a6ff
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 16:14:12 2019 -0300

    update solidity-docgen dependency

    fixes uri encoded links

commit faab0e50da91cd2f0a409e3ad32e2db127ad319a
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 16:05:03 2019 -0300

    update openzeppelin-docsite and solidity-docgen dependencies

    add visibility specifiers

commit ef305268bb2735e488e35d16819a4b432b3a35e3
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 23 15:36:45 2019 -0300

    Fix guide links.

commit 339b20dbfa2d5f6ea02e63c2f3fdcba0fe879c3c
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 23 13:37:51 2019 -0300

    Fix typos.

commit 6c7b97460578b9eea90b53c280454e361f8f0052
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:26:29 2019 -0300

    fix utilities guide links

commit 0e7692a8fd8516a11becc4121d77d792439600b1
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:23:19 2019 -0300

    update solidity-docgen dependency

commit ebb8a8651516ece21736c6c3b2577eb1b3487651
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:15:01 2019 -0300

    fix utilities guide links

commit 5ec47d62785e1d6e5f8e91edca58f2dc7f87d7a3
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 15:14:49 2019 -0300

    fix escrow docs ordering

commit cdcdc909b16f219a9a3272036b6a8f21e34b48ef
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 13:35:07 2019 -0300

    add wip notice

commit 987e2951ae93211c8c70c8288e30573555c57830
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 13:09:35 2019 -0300

    update openzeppelin-docsite dependency

    fixes links to old versions

commit b00d22c0affac2e2108df8b773dfa1706afcb44e
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 23 13:09:28 2019 -0300

    fix guide links

commit f112a9400c5e5ad495c8e0fdb972e26987b34244
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 20:42:37 2019 -0300

    update docsite

commit 68aacdd56a29e35a84f6732f9293612bbcaf7520
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 20:00:39 2019 -0300

    ERC20Capped

commit 4edce78bab2c6d140f3ea3f33db71e92ca4d8aaf
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 19:52:30 2019 -0300

    Unnecessary polish on token docs.

commit 2a4c91cf49c2736dc09c1c03cf383911def1a1b2
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 19:20:05 2019 -0300

    rename guides

commit 61dd818ea76d4c170c4ab175c6be0d6067d21a29
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 17:04:09 2019 -0300

    ERC1820 docs.

commit 77b5f0353123b76358dc6d86bdc646c86c9b0bea
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 16:17:34 2019 -0300

    Introspection and ERC165.

commit 76641a253b3b70279802c5134dd107532eea4b2c
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 17:59:53 2019 -0300

    update docgen

commit 7be98bc3fbd3566231f943f01b9acb58567d755b
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 17:23:50 2019 -0300

    update solidity-docgen

commit f7268e6e010f8ef9ac83df241a803f91efc08c0c
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 16:58:31 2019 -0300

    update docgen

commit 2a8c7a378e8962a5baeb334b2492815f05075f98
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Wed May 22 14:36:35 2019 -0300

    Util docs.

commit 327ae8ff45a1a523c7591bf4996c4a9b52d7ec7a
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 13:08:50 2019 -0300

    add missing drafts

commit 5e7f71335ac8423c0e363ae8c7ad9b2977f202f8
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:47:41 2019 -0300

    tweak ierc20 docs

commit cd0e86a0b712f74ffd406e072d4b1fbf4dd2c176
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:46:45 2019 -0300

    add some erc721 docs

commit e081184159417f71da14bc0fc110b7b11e29d75d
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:41:46 2019 -0300

    update docsite

commit 0beb75784022419d47123c2a9fe7a5f1eb87f9b2
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 12:22:27 2019 -0300

    correct drafts structure

commit 2e94b287c7cead7a6c0603205670566461c31abb
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 11:56:25 2019 -0300

    fix docsite-start script

commit 0fa4160484309d0851584fe57c0d81a3600977db
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 11:47:44 2019 -0300

    improve docsite start script (automatically watch docgen)

commit 9d571897cc03bee92035964cf7a2cfeda1e2f690
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 22 11:30:37 2019 -0300

    update solidity-docgen

commit 82980f5aefbdfb8a9815a3b7b0e88e970b65dd5d
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 19:15:13 2019 -0300

    edit docs for Secondary

commit 00d7a005b0530bee730b77a1b69a95f1b4ffe315
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 19:15:13 2019 -0300

    edit docs for ownable

commit b0c4c2bdf83eca5d4a71792daac603236733d46e
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 18:27:13 2019 -0300

    change title of Math section

commit deb788583f191780e55b7f673520eaf13a5c7e23
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 18:26:59 2019 -0300

    capitalization

commit f2bcf85d343ea4a0739fe22a77b1e22c2296ddea
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Tue May 21 18:26:06 2019 -0300

    edit docs for Pausable

commit 73ba0cf43dbb44c39c1bf2ee63ef9fe558faa919
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Sat May 18 19:08:06 2019 -0300

    Crypto docs.

commit 9d6fc6223f51cf2321b2e3217c512579654c3917
Merge: 7e21f8f7 9f1cec12
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Fri May 17 17:23:15 2019 -0300

    Merge branch 'api-docs-777' into api-docs

commit 9f1cec12e3351fb1b5fc0b59f5ded39928064a56
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Fri May 17 17:22:54 2019 -0300

    ERC777 done.

commit 7e21f8f7b6982d2f92df302cdf6ec62522d8ffff
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Fri May 17 16:39:47 2019 -0300

    add math docs

commit f18d1f17023b6e5b42ae04fc38aa1170e6863864
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 20:01:46 2019 -0300

    First draft of ERC777 docs.

commit 985c5d3053
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 19:14:32 2019 -0300

    Final draft for IERC777.

commit bf53f133d987b67f938a329e6d659ba3483aab0b
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 16 19:13:37 2019 -0300

    more work on ERC20 api docs

commit b7c250b7cb
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 17:08:47 2019 -0300

    Fix typo.

commit 197bbfbfc6
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 17:05:14 2019 -0300

    Initial draft of IERC777.

commit 7dc3b55161c860437a8f13a2ce5808b1c3dd70a2
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Thu May 16 11:58:32 2019 -0300

    add payment docs structure

commit da16fc4480
Author: Nicolás Venturo <nicolas.venturo@gmail.com>
Date:   Thu May 16 16:05:33 2019 -0300

    Initial ERC777 docstrings.

commit 9f6a7e35bd
Author: Francisco Giordano <frangio.1@gmail.com>
Date:   Wed May 15 22:13:17 2019 -0300

    partial pass through ERC20 docs
2019-05-23 18:17:18 -03:00
96fbe823ff Change prepack npm script to prepare (take 2) (#1755)
* update truffle to include bugfix

* change prepack script to prepare

* add npx in compile script

* fix for older node

* rename script file to prepare

(cherry picked from commit 036dd9bd6e)
2019-05-22 19:16:28 -03:00
ca922c8fed add log about removed artifacts in prepack.js
(cherry picked from commit dd6ec21951)
2019-05-22 19:16:28 -03:00
ee7ff81728 Improve prepack script (#1747)
* improve prepack script

* remove .npmignore

* make prepack use pkg.files

* fix linter errors

(cherry picked from commit cc19ccfdb3)
2019-05-22 19:14:03 -03:00
b7b8fa947e fix prepack script
(cherry picked from commit fa004a7f5d)
2019-05-22 19:13:20 -03:00
036dd9bd6e Change prepack npm script to prepare (take 2) (#1755)
* update truffle to include bugfix

* change prepack script to prepare

* add npx in compile script

* fix for older node

* rename script file to prepare
2019-05-22 18:35:40 -03:00
a289314426 2.3.0-rc.3 2019-05-16 16:09:19 -03:00
9ab93f8ae4 Update transferFrom to modify allowance in-between hook calls. (#1751)
* Fix transferFrom not updating allowance before calling receiver.

* Fix from being passed as operator.

(cherry picked from commit 2ccc12b328)
2019-05-16 16:07:45 -03:00
f7ff3e7e67 Disallow ERC20._transfer from the zero address. (#1752)
* Add requirement of non-zero from to ERC20 transfer.

* Add test for transferFrom zero address to behavior.

* Create ERC20.transfer behavior.

* Add tests for _transfer.

* Add changelog entry.

* Fix linter error.

* Delete repeated test.

* Fix hardcoded error prefix.

* Update CHANGELOG.md

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Address review comments.

(cherry picked from commit ad18098d65)
2019-05-16 16:07:37 -03:00
2ccc12b328 Update transferFrom to modify allowance in-between hook calls. (#1751)
* Fix transferFrom not updating allowance before calling receiver.

* Fix from being passed as operator.
2019-05-16 16:01:02 -03:00
ad18098d65 Disallow ERC20._transfer from the zero address. (#1752)
* Add requirement of non-zero from to ERC20 transfer.

* Add test for transferFrom zero address to behavior.

* Create ERC20.transfer behavior.

* Add tests for _transfer.

* Add changelog entry.

* Fix linter error.

* Delete repeated test.

* Fix hardcoded error prefix.

* Update CHANGELOG.md

Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>

* Address review comments.
2019-05-16 11:50:54 -03:00
dd6ec21951 add log about removed artifacts in prepack.js 2019-05-15 16:33:00 -03:00
cc19ccfdb3 Improve prepack script (#1747)
* improve prepack script

* remove .npmignore

* make prepack use pkg.files

* fix linter errors
2019-05-14 16:04:40 -03:00
fa004a7f5d fix prepack script 2019-05-10 22:21:36 -03:00
64d6fefc11 Move ERC1820 and ERC777 tests out of drafts. 2019-05-08 17:13:27 -03:00
74ef942bd1 2.3.0-rc.2 2019-05-08 17:03:46 -03:00
b6b2aea212 Remove broken linter rule.
(cherry picked from commit 3112c1b95e)
2019-05-08 16:23:12 -03:00
3112c1b95e Remove broken linter rule. 2019-05-08 16:22:46 -03:00
81d04101ff Fix linter.
(cherry picked from commit c92b75305e)
2019-05-08 16:17:59 -03:00
1292b6abab Move ERC1820 and ERC777 out of drafts (#1742)
* Moved ERC1820 related contracts out of drafts and into introspection.

* Moved ERC777 related contracts out of drafts and into token.

(cherry picked from commit c794c96617)
2019-05-08 16:15:39 -03:00
44590fe0b6 Inline keccak256 result (#1741)
* inline keccak256 result

* Update ERC777.sol

* switch hex constant style

* Update ERC777.sol

(cherry picked from commit e60c7904d4)
2019-05-08 16:15:28 -03:00
6c2b7c260d Add ERC20 compatibility to ERC777. (#1735)
* Add ERC20 compatibility.

* Reusing ERC20 tests for ERC777.

* Improve documentation.

* Add changelog entry.

* Improved ERC20 behavior tests.

* Add revert reasons to ERC777.

* ERC20 methods allow sending tokens to contracts with no interface.

* Register ERC20 interface.

* Add comment about avoidLockingTokens.

* Improve revert reason string.

* Make ERC777 implement IERC20.

* Fix test revert string.

* Remove unnecesary require.

* Add private _transfer.

* Update contracts/drafts/ERC777/ERC777.sol

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Update private helper names.

(cherry picked from commit aa4c9feabd)
2019-05-08 16:15:19 -03:00
835c23d6f7 Hardcode ERC777 granularity to 1, remove tests. (#1739)
* Hardcode ERC777 granularity to 1, remove tests.

* Add clarifying title comment.

(cherry picked from commit 376820d55c)
2019-05-08 16:15:04 -03:00
c794c96617 Move ERC1820 and ERC777 out of drafts (#1742)
* Moved ERC1820 related contracts out of drafts and into introspection.

* Moved ERC777 related contracts out of drafts and into token.
2019-05-08 16:11:00 -03:00
c92b75305e Fix linter. 2019-05-08 16:09:30 -03:00
e60c7904d4 Inline keccak256 result (#1741)
* inline keccak256 result

* Update ERC777.sol

* switch hex constant style

* Update ERC777.sol
2019-05-08 15:12:13 -03:00
aa4c9feabd Add ERC20 compatibility to ERC777. (#1735)
* Add ERC20 compatibility.

* Reusing ERC20 tests for ERC777.

* Improve documentation.

* Add changelog entry.

* Improved ERC20 behavior tests.

* Add revert reasons to ERC777.

* ERC20 methods allow sending tokens to contracts with no interface.

* Register ERC20 interface.

* Add comment about avoidLockingTokens.

* Improve revert reason string.

* Make ERC777 implement IERC20.

* Fix test revert string.

* Remove unnecesary require.

* Add private _transfer.

* Update contracts/drafts/ERC777/ERC777.sol

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Update private helper names.
2019-05-08 13:13:19 -03:00
86f214b7a3 update openzeppelin-docsite to fix windows issues (part 2) 2019-05-07 19:10:39 -03:00
376820d55c Hardcode ERC777 granularity to 1, remove tests. (#1739)
* Hardcode ERC777 granularity to 1, remove tests.

* Add clarifying title comment.
2019-05-07 17:05:12 -03:00
b84c145c12 update openzeppelin-docsite to fix windows issues 2019-05-06 20:04:43 -03:00
b85dfb9824 make nightly job conditional (#1737) 2019-05-06 16:44:56 -03:00
6782f91425 Update vulnerable dependencies.
(cherry picked from commit e287ea6fe5)
2019-05-02 15:55:34 -03:00
e287ea6fe5 Update vulnerable dependencies. 2019-05-02 15:52:27 -03:00
9646cc951f Fix solc-nightly job (#1732)
* update truffle to 5.0.14

* fix setup to test with solc-nightly

* switch to npx in script/test.sh

* please the linter

* rename build to prepack

* move download of nightly build to a compile script

* make compile script executable
2019-05-02 14:58:06 -03:00
2d467268e5 2.3.0-rc.1 2019-04-24 19:44:43 -03:00
31bc231c2c fix typo in release script 2019-04-24 19:43:26 -03:00
4b2229783d fix pr number in changelog
(cherry picked from commit af55a843e3)
2019-04-24 19:35:53 -03:00
af55a843e3 fix pr number in changelog 2019-04-24 19:35:30 -03:00
ae919629cd Revert Solidity version bump. (#1729)
(cherry picked from commit 67bca857ee)
2019-04-24 19:33:32 -03:00
67bca857ee Revert Solidity version bump. (#1729) 2019-04-24 19:32:08 -03:00
2769d0d2c7 update links in documentation setup description 2019-04-24 19:18:42 -03:00
a3af8266db 2.3.0-rc.0 2019-04-24 11:35:30 -03:00
9d868ee846 Add revert reasons changelog entry. 2019-04-24 11:32:30 -03:00
2f8e844514 Fix remaining revert reasons. 2019-04-24 11:25:09 -03:00
3682c6575c Added message string for require() (#1704)
* Error handling in ERC20 and ERC721

* Added message string for require.

* Fixed solhint errors.

* Updated PR as per issue #1709

* changes as per #1709 and openzeppelin forum.

* Changes in require statement

* Changes in require statement

* build pipeline fix

* Changes as per @nventuro's comment.

* Update revert reason strings.

* Fianal update of revert reason strings.

* WIP: Updating reason strings in test cases

* WIP: Added changes to ERC20 and ERC721

* Fixes linting errors in *.tes.js files

* Achieved 100% code coverage

* Updated the test cases with shouldFail.reverting.withMessage()

* Fix package-lock.

* address review comments

* fix linter issues

* fix remaining revert reasons
2019-04-24 11:17:08 -03:00
4a0a67b04c make some updates on the get started guide (#1725) 2019-04-23 20:20:01 -03:00
97a9ca5681 Add a vault to PostDeliveryCrowdsale. (#1721)
* Add a vault to PostDeliveryCrowdsale.

* Add changelog entry.

* Apply suggestions from code review

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Rename TokenVault.

* add solhint ignore directive
2019-04-23 19:06:09 -03:00
19c7414052 Bump minimum Solidity version to 0.5.7 (#1724)
* Bump Solidity version to 0.5.7

* Add changelog entry.
2019-04-23 16:18:08 -03:00
5e46cf6de4 Fix linter error. 2019-04-23 14:30:58 -03:00
ed5652b0aa New documentation setup (#1708)
* initial docsite setup

* switch from pushd to cd

* install and set up solidity-docgen

* use the docsite branch next for now

* make it clear that env var is a repository

* add a clarifying comment about a relative path

* change relative to absolute path in docsite script

* add docgen script

* add first few READMEs for contract documentation

* update solidity-docgen

* add docsite as dependency and adjust script

* update openzeppelin-docsite

* update solidity-docgen

* remove dummy text

* update docgen and docsite

* update openzeppelin-docsite

* add netlify.toml

* udpate tokens guide for 2.2

* add DOCUMENTATION.md

* Update docs/learn-about-utilities.md

Co-Authored-By: frangio <frangio.1@gmail.com>

* fix PaymentSplitter docs wording

* update solidity-docgen

* add missing ERC20 contracts

* update solidity-docgen

* trigger deploy with cleared cache

* update solidity-docgen

* update openzeppelin-docsite

* remove travis docs setup

* update openzeppelin-docsite

* switch to published solidity-docgen
2019-04-23 12:25:22 -03:00
412cdfd0be Release automation (#1720)
* Create autoamtic release script.

* Add changelog update date script.

* Improve release scripts.

* Apply suggestions from code review

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Apply suggestions from code review

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Remove moment dependency.
2019-04-22 17:31:32 -03:00
59f03f00c5 Fix stalebot exempt labels 2019-04-19 15:25:36 -03:00
ea59f86cdf Update stalebot wording and timing. (#1722) 2019-04-19 02:20:47 -03:00
0df0e1b250 Fixes/Improves constants inline documentation. (#1707)
* Fixes/Improves constants inline documentation.

* Fixed solhint error.

* Moved the comment before the variable
2019-04-17 16:38:33 -03:00
5a2b349992 Feature/erc777 #1159 (#1684)
* IERC777 from specs, constants returned, up to defaultOperators. (#1159)

* IERC777 oprarator approvals (#1159)

* ERC777 oprarator approvals fixes and tests

* IERC777 send and receive with ERC820 (#1159)

* ERC777 Add burn functions and fix send functions (#1159)

* ERC777 Make expectEvent compatible with web3.js 1.0 (#1159)

* ERC777 Add ERC820 deploy script (#1159)

* ERC777 Complete implementation of ERC777 (#1159)

This implementation conforms to the current EIP

* ERC777 Update ERC820 Registry contract to final version (#1159)

* ERC777 Move contracts to 'drafts' folder (#1159)

* ERC777: Update to ERC1820 registry and linter error fix (#1159)

* ERC777: implement recent changes of EIP777 (#1159)

* ERC777 Fix formatting (#1159)

* ERC777 Update to solc 0.5.2 (#1159)

* ERC777 Fix travis CI errors (#1159)

* ERC777 Fix linter errors again... (#1159)

* ERC777 Fix unit test (#1159)

* ERC777 Fix unit test again (#1159)

* Remove extra newlines.

* Rename ERC777Base to ERC777.

* Remove 'Token' from contract names.

* Replace ops for operators.

* Move operator check out of _send.

* Remove ERC777Burnable.

* Remove ERC1820Client, now using the interface directly.

* Minor internal refactors in contracts.

* Delete extra test helpers.

* Simplified tests.

* Add basic 777 tests.

* Add granularity send test.

* Add first operator send tests.

* Add burn tests.

* Refactor send and burn tests.

* Improve send burn refactor.

* Greatly improve test module.

* Burn instead of send removed tokens.

* Add operator tests.

* Improve send tests under changing operators.

* Refactor and merge send and burn tests.

* Add missing and not-implemented tests.

* Make _burn private.

* Fix typo.

* Greatly improve tokensToSend tests.

* Refactor hook tests.

* Fix hook tests.

* Update openzeppelin-test-helpers and ERC1820 address.

* Fix natspec indentation.

* Make interface functions external.

* Remove redundant private revoke and authorize functions.

* Improved readability of if statement.

* Remove unnecessary asserts.

* Add non-one granularity test.

* Fix hook call order in _mint.

* Fix _mint not reverting on failure to implement tokensReceived.

* Remove special case in operatorFn when from is 0.

* Refactor ERC777SenderMock.

* Add tokensReceived tests.

* switch to updated ganache-cli-coverage fork

* Fix linter errors.

* Add mint tests.

* Fix linter errors.

* Fix tests.

* Update test/drafts/ERC777/ERC777.test.js

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Add changelog entry.
2019-04-16 13:13:46 -03:00
963f1eb35b removed unnecessary require and renaming of null to zero (#1717)
* removed unnecessary require

* build pipeline fix

* kept as it is

* Added require
2019-04-15 16:03:44 -03:00
bbe0eefd9f removing unused variables (#1719)
* removing unused variables

* undeleting the _
2019-04-12 13:25:21 -03:00
19c705d928 Fix/rename anyone account #1357 (#1718)
* replacing all instances of from: anyone with from: other

* replacing all instances of from: anyone with from: other

* replacing all instances of from: anyone with from: other

* changing anyone to other

* changing anyone to other
2019-04-11 12:34:10 -03:00
d45f0c89db Update copyright notice 2019-04-10 19:23:54 -03:00
1ebeef7ffd Remove unnecessary SLOAD. (#1715) 2019-04-10 12:29:58 -03:00
b353f7e18c Add more extensive documentation to PaymentSplitter (#1713)
* Update PaymentSplitter.sol

* add back private function docs

* add non-zero address requirement

* add comprehensive contract-level docs

* use capital E for Ether
2019-04-09 19:47:20 -03:00
92e68e3aaa Revert "Add WIP bot."
This reverts commit 07fc8c731a.
2019-04-09 18:52:17 -03:00
07fc8c731a Add WIP bot. 2019-04-09 18:44:39 -03:00
81e36d2e74 Fix from account in remove public role behaviors (#1710) 2019-04-05 18:06:22 -03:00
35d8e860ad Remove unused files (#1698)
* Remove unused dependencies.

* Remove unused mock contracts.
2019-04-01 15:00:39 -03:00
8b44efd035 add note about Counters rename in changelog (#1703) 2019-04-01 13:24:50 -03:00
3cb4a00fce Added basic punctuation to @dev docs (#1697) (#1700)
* Added basic punctuation to @dev docs (#1697)

* add missing uppercase
2019-03-30 16:48:17 -03:00
c008f1f0c6 Exclude on-hold PRs and issues on stalebot. (#1696) 2019-03-26 16:21:13 -03:00
dc5ca8edc4 Edit Ethereum dev framework links in README. (#1695)
Added Buidler.
2019-03-25 16:22:48 -03:00
7ccd224567 Update SafeERC20.sol (#1693) 2019-03-25 14:27:26 -03:00
cf7375d6b8 Update openzeppelin-test-helpers dependency. 2019-03-19 17:54:02 -03:00
308a4c9907 Draft EIP 1820 (#1677)
* Add barebones EIP1820 support.

* Update openzeppelin-test-helpers dependency to have ERC1820 support.

* Add tests for ERC1820.

* Improve inline documentation.

* Add changelog entry.

* Update test-helpers, refactor tests to use new helpers.

* Rename ERC1820 to ERC1820Implementer.

* Improve implementer docstring.

* Remove _implementsInterfaceForAddress.

* update openzeppelin-test-helpers to 0.2.0

* Update contracts/drafts/ERC1820Implementer.sol

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Fix how solidity coverage is run to allow for free events.

* Fix coverage testing script.
2019-03-19 15:13:55 -03:00
269e096c5a Remove unused return variables. (#1686) 2019-03-19 11:51:46 -03:00
edfce5a3dd Add probot/stale to the repo. (#1681) 2019-03-17 22:38:36 -03:00
ab14debb08 Make waiting for ganache to launch more robust. (#1683) 2019-03-17 16:59:29 -03:00
40d2eb3007 Merge branch 'release-v2.2.0' 2019-03-14 18:46:11 -03:00
9ed1b44865 Release v2.2.0 2019-03-14 18:44:19 -03:00
7aaf15be59 Add v2.2.0 release date. 2019-03-14 18:43:33 -03:00
2a37b09cf6 Improve test script. (#1675) 2019-03-12 17:17:33 -03:00
29fa0a4ce5 Add API stability doc link. (#1672)
* Add API stability doc link.

* Update README.md

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>
2019-03-12 13:31:22 -03:00
06f7266a6e Replace mentions of Slack for forum links. (#1671)
* Replace mentions of Slack for forum links.

* make forum lowercase
2019-03-12 13:15:46 -03:00
4c706480e5 Fix typo in ERC20Snapshot. (#1670) 2019-03-12 13:15:08 -03:00
4dd8575bb6 Improve erc165 testing #1203 (#1666)
* Rename variable from thing to contractUnderTest

* Compute function signatures in ERC165 interfaces

The ERC165 tests currently precompute some known interface ids.
This commit extracts the interfaces into a separate object and
precomputes the individual function signatures.

This will be useful to identify contracts that support an interface
but do not implement all of the corresponding functions.

* Add tests for ERC165 interface implementations

The ERC165 tests confirm that contracts claim to support
particular interfaces ( using the supportsInterface method )

This commit extends those tests to confirm that the corresponding
functions are included in the contract ABI.

It also rewords the existing test names in order to group the
implementation tests with the corresponding interface tests.

* Remove obsolete ERC721Exists interface constant
2019-03-07 19:41:22 -03:00
9c69df5962 Fix changelog entry. 2019-03-07 14:34:51 -03:00
1e5295d304 Release candidate v2.2.0-rc.1 2019-03-07 12:52:10 -03:00
61c4318c33 Reorder 2.2.0 changelog entries. 2019-03-07 12:46:36 -03:00
79dd498b16 Signature Malleability: (#1622)
* Transaction Malleability:
If you allow for both values 0/1 and 27/28, you allow two different
signatures both resulting in a same valid recovery. (r,s,0/1) and
(r,s,27/28) would both be valid, recover the same public key and sign
the same data. Furthermore, given (r,s,0/1), (r,s,27/28) can be
constructed by anyone.

* Transaction Malleability:
EIP-2 still allows signature malleabality for ecrecover(), remove this
possibility and force the signature to be unique.

* Added a reference to appendix F to the yellow paper and improved
comment.

* better test description for testing the version 0, which returns
a zero address

* Check that the conversion from 0/1 to 27/28 only happens if its 0/1

* improved formatting

* Refactor ECDSA code a bit.

* Refactor ECDSA tests a bit.

* Add changelog entry.

* Add high-s check test.
2019-03-07 12:44:28 -03:00
547a5f242a Add extcodesize check to SafeERC20. (#1662)
* Add extcodesize check to SafeERC20.

* Clarify some comments.

* Replace inline assembly with Address.sol.
2019-03-06 14:11:08 -03:00
352ec94579 Add TimedCrowdsale::_extendTime (#1636)
* Add TimedCrowdsale::_extendTime

* Add tests for TimedCrowdsale extending method

* Reverse event arguments order

* Rename method argument

* Refactor TimedCrowdsale test

* Simplify TimedCrowdsaleImpl

* Fix extendTime method behaviour to deny TimedCrowdsale re-opening after it was ended

* Append chengelog

* Update CHANGELOG.md

Co-Authored-By: k06a <k06aaa@gmail.com>

* Update contracts/crowdsale/validation/TimedCrowdsale.sol

Co-Authored-By: k06a <k06aaa@gmail.com>

* Improve tests
2019-03-06 11:38:57 -03:00
3772233cf5 Add guard to ERC20Migrator migrate function (#1659)
* Add guard to ERC20Migrator migrate function

* Add tests for premature migration in ERC20Migrator

These tests apply to the new guard condition, but they don't
fail without it, since the functions revert anyway.
They are added for completeness and to ensure full code coverage.

* Use context block around premature migration tests

We should use context blocks for situational details
and describe for features or functions.
2019-03-02 12:36:36 -03:00
7f54542172 Add latest audit to repository (#1664)
* rename previous audit to date it was performed

* add latest audit

* add note about latest audit in README
2019-03-01 20:04:00 -03:00
3ff2e24518 remove .node-version file (#1665) 2019-03-01 20:01:09 -03:00
0c617b755e fix weird date format (#1663) 2019-03-01 15:36:39 -03:00
8cc3349d1f Fix typo: "an uint256" -> "a uint256" (#1658)
Using "a" instead of "an" makes this consistent with the comment on `allowance`.
2019-03-01 10:03:19 -05:00
41aa39afbc Add no-return-data ERC20 support to SafeERC20. (#1655)
* Add no-return-data ERC20 support to SafeERC20.

* Add changelog entry.

* Replace abi.encodeWithSignature for encodeWithSelector.

* Remove SafeERC20 test code duplication.

* Replace assembly for abi.decode.

* Fix linter errors.
2019-02-28 17:34:46 -03:00
0dded493a0 Nonfunctional typos #1643 (#1652)
* Add IntelliJ IDE config to .gitignore

* Fix variable name in ERC20 function comments

* Fix typos in Arrays function comment

* Fix typos in ownership test names

* Fix typo in Pausable test name

* Fix grammar in Ownable function comment

* Fix grammar in Crowdsale contract comment

* Fix typo in Counters contract comment

* Fix typo in ERC721Enumerable comment

* Fix typo in ERC721PausedToken test name

* Fix typo in Crowdsale function comment

* Fix typo in IncreasingPriceCrowdsale function comment

* Fix grammar in IncreasingPriceCrowdsale test name

* Fix typo in AllowanceCrowdsale test name

* Fix typo in RefundEscrow function comment

* Fix typo in ERC20Migrator contract comment

* Fix typos in SignatureBouncer comments

* Fix typo in SignedSafeMath test name

* Fix typo in TokenVesting contract comment

* Move Ownable comment from @notice section to @dev

The Ownable contract has a comment explaining that renouncing
ownership will prevent execution of functions with the onlyOwner
modifier.

This commit moves that comment to the @dev section and replaces it
with a description suitable for a generic user.

* Clarify purpose of ERC20 transfer function

* Clarify registration of ERC721Enumerable interface

* Clarify purpose of AllowanceCrowdsale test

* Increase specificity of inheritance comments

FinalizableCrowdsale and RefundableCrowsale both have comments
indicating that they are extensions of the Crowdsale contract.

This commit refines those comments to the most immediate ancestor
( TimedCrowdsale and RefundableCrowdsale respectively )

* Remove unused parameter in PaymentSplitter test

* Rename parameter in SignatureBouncer functions

The SignatureBouncer contract has modifiers to validate the
message sender is authorised to perform an action. They pass
msg.sender to internal functions as the variable `account`, but
the function comments refer to the variable as `sender`

This commit changes the variable name to `sender`

* Clarify comments in SignatureBouncer functions

The SignatureBouncer has comments that use the description
`sender` to refer to the variable `account`.

This commit updates the comments for consistency.

Maintainer Note: this reverts changes in the previous commit,
which renamed the variable `account` instead.
2019-02-28 11:46:13 -03:00
a1f168be96 Add the solidity linter command to the PR template (#1653)
* Add the solidity linter command to the PR template

The PR template states that a contributor should run the
Solidity/JS linters before submission. However, it only states the
command for the JS linter.

This commit adds the Solidity linter command explicitly.

* Use past tense in the list of prerequisites
2019-02-27 12:31:56 -03:00
5b93137c26 Merge branch 'release-v2.1.3' 2019-02-26 17:15:07 -03:00
f5ba7e7f0d Merge branch 'release-v2.0.1' 2019-02-26 17:12:39 -03:00
5a64eb2e14 Release v2.0.1 2019-02-26 16:41:00 -03:00
2648206394 Merge pull request #1647 from nventuro/safeerc20-bugfix
Fix SafeERC20.safeApprove bug

(cherry picked from commit 3111291b4a)
2019-02-26 16:36:17 -03:00
77d569d8fa Release v2.1.3 2019-02-26 16:29:24 -03:00
634883ce8e Add bugfix backport changelog entry. 2019-02-26 16:28:36 -03:00
de90f4458a Merge pull request #1647 from nventuro/safeerc20-bugfix
Fix SafeERC20.safeApprove bug

(cherry picked from commit 3111291b4a)
2019-02-26 16:23:25 -03:00
a39bea230e Add SafeERC20 bugfix changelog entry. 2019-02-26 16:17:29 -03:00
8d0937c54c Merge pull request #1650 from nventuro/missing-changelog-data
Added PR links for 2.2.0 changelog entries.
2019-02-26 14:27:19 -03:00
d6c47c4b7c Added PR links for 2.2.0 changelog entries. 2019-02-26 13:19:51 -03:00
3111291b4a Merge pull request #1647 from nventuro/safeerc20-bugfix
Fix SafeERC20.safeApprove bug
2019-02-26 12:39:02 -03:00
14ec984cc4 Merge pull request #1646 from fulldecent/patch99
Use canonical EIP reference format
2019-02-25 15:27:48 -03:00
b14c9f4b68 Fix SafeERC20.safeApprove bug, improve test coverage. 2019-02-25 14:41:26 -03:00
fc17a1d9f5 Add usage docs to ERC20 Snapshot (#1639) 2019-02-25 10:36:16 -05:00
c44e40c293 Clarify the ERC20Snapshot contract comment (#1638) 2019-02-25 10:28:14 -05:00
2fc0aaabb3 Use canonical EIP reference format 2019-02-24 11:52:22 -05:00
ae41195863 Merge pull request #1645 from fulldecent/patch-1
Update to preferred citation formation for ERC-721
2019-02-24 08:58:16 -03:00
99a07493f2 Update to preferred citation formation for ERC-721 2019-02-23 16:56:47 -05:00
328d03a7f4 Merge pull request #1637 from elopio/review/snapshot/1-minime-link
Add a link to the minime token
2019-02-20 16:17:56 -03:00
530c90d438 Merge pull request #1640 from elopio/review/snapshot/4-snapshoted-typo
Fix typo: snapshoted
2019-02-20 16:16:32 -03:00
3654150d0c Fix typo: grater (#1641) 2019-02-20 16:16:13 -03:00
9cf68279c1 Fix typo: to be find (#1642) 2019-02-20 16:15:51 -03:00
039e5b9602 Fix typo: grater 2019-02-16 00:34:03 +00:00
cab777b820 Fix typo: snapshoted 2019-02-15 23:35:30 +00:00
7ed22bbded Add the @dev tag 2019-02-15 23:21:18 +00:00
889af764e2 Add a link to the minime token 2019-02-15 16:27:03 +00:00
40d15146c4 ERC20 Snapshot Impl #2 (#1617)
* ✏️ Refactor code & Refork OZ Repo

* Refactor ERC20Snapshot to use on-demand snapshots.

* Add ERC20Snapshot changelog entry.

* Move ERC20Snapshot to drafts.

* Improve changelog entry.

* Make snapshot tests clearer.

* Refactor ERC20Snapshots to use Counters.

* Refactor snapshot arrays into a struct.

* Remove .DS_Store files.

* Delete yarn.lock

* Fix linter error.

* simplify gitignore entry
2019-02-06 16:26:59 -03:00
2c34cfbe0e Fix typo in README (#1624) 2019-01-29 09:31:18 -06:00
8dd92fd6ca Add ERC20 _setTokenURI (#1618)
* Add _setTokenURI internal.

* Rename TokenMetadata to ERC20Metadata.

* Add changelog entry for ERC20Metadata.

* Fix linter error.

* Add breaking change changelog notice.
2019-01-25 15:16:19 -03:00
1fd993bc01 Unify code comments style. (#1603)
* Updated code style to no more than120 characters per line.

* Unify code comments style with Doxygen-style tags.
2019-01-25 13:16:40 -03:00
a09cf147ea Bring back coverage report. (#1620)
* Add back solidity-coverage (using fork).

* Pin fork version.
2019-01-23 13:30:34 -03:00
f80c65ff67 Improve SafeMath test coverage. (#1611)
* Improve SafeMath test coverage.

* Fix linter error.

* Split testCommutative into something more sane.
2019-01-21 17:51:35 -03:00
07603d5875 Remove unnecessary SafeMath call (#1610)
* Refactor Counter to support increment and decrement.

* Move Counter out of drafts.

* Refactor ERC721 to use Counter.

* Rollback Counter returning the current value in increment and decrement.

* Update test/drafts/Counter.test.js

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Improve Counter documentation.

* Move Counter.test to utils.

* Move back Counter to drafts.
2019-01-21 17:24:51 -03:00
3a5da75876 ERC20._approve (#1609)
* Add ERC20._approve.

* Add ERC20._approve tests.

* Fix linter error.

* Require owner in _approve to be non-zero.
2019-01-21 17:23:38 -03:00
e1f40e7e23 Merge branch 'release-2.1.2' 2019-01-18 15:46:52 -03:00
8617c4b4c8 Release v2.1.2 2019-01-18 15:45:25 -03:00
96432bf28e Renamed test/behavior to test/behaviors. 2019-01-18 15:44:59 -03:00
1a9cb0786d Add changelog entry for PublicRole behavior. 2019-01-17 20:36:55 -03:00
fd808b3ff8 Add some barebones PublicRole.behavior documentation. 2019-01-17 20:27:51 -03:00
6a658f2ac8 Move PublicRole.behavior to behavior directory. 2019-01-17 20:26:56 -03:00
d9a8cd2bef Only publish the test suite behavior subdirectory 2019-01-17 20:24:53 -03:00
b7d60f2f9a Fix warnings (#1606)
* Bump required compiler version to 0.5.2.

* Fix shadowed variable warning in ERC20Migrator.

* Rename Counter to Counters.

* Add dummy state variable to SafeERC20Helper.

* Update changelog entry.

* Fix CountersImpl name.

* Improve changelog entry.
2019-01-17 15:59:30 -03:00
7fb90a1566 Update readme example to use 0.5.0. 2019-01-14 19:28:25 -03:00
e5b94c1481 Merge branch 'release-v2.1.0' 2019-01-14 19:19:25 -03:00
79145fa53a Temporarily disable solidity-coverage Travis job. 2019-01-14 19:13:45 -03:00
3e82db2f6f Migration to truffle 5 (and web3 1.0 (and BN)) (#1601)
* Now compiling using truffle 5.

* Migrated some test files, missing BN scientific notation usage.

* Now using BN time values.

* Migrate ERC20 tests.

* Migrate all ERC20 tests.

* Migrate utils, payment and ownership tests.

* All tests save ERC721 migrated.

* Migrated ERC721 tests.

* Fix lint errors.

* Delete old test helpers.

* Fix remaining crowdsale tests.

* Fix signature bouncer tests.

* Update how constants is used.

* Compile script pre-removes the build dir.

* Fix SafeMath tests.

* Revert "Compile script pre-removes the build dir."

This reverts commit 247e745113.

* Fix linter errors.

* Upgrade openzeppelin-test-helpers dependency.

* Update openzeppelin-test-helpers dependency.

* Define math constants globally.

* Remove unnecessary ether unit.

* Roll back reduced ether amounts in tests.

* Remove unnecessary toNumber conversions.

* Delete compile script.

* Fixed failing test.
2019-01-14 19:11:55 -03:00
089f14aa06 Add 2.2.0 changelog entry. 2019-01-11 17:48:41 -03:00
ae02103e47 Release v2.1.1 2019-01-04 18:40:49 -03:00
ba83239dd8 Added 2.1.1 changelog entry. 2019-01-04 18:40:27 -03:00
14a59b2903 Update RELEASING.md 2019-01-04 17:42:34 -03:00
4f5715bbd7 Release v2.1.0 2019-01-04 17:39:42 -03:00
312a2584e8 Updated 2.1 release date. 2019-01-04 17:39:32 -03:00
c23b7ffbad Update RELEASING.md 2019-01-04 17:35:08 -03:00
6aa88e2b7d silence npm output (#1590) 2019-01-04 17:30:45 -03:00
76abd1a41e Replaced Solium in favor of Solhint (#1575)
* Adding solhint, working on style fixes.

* Upgraded to solhint 1.5.0.

* Removed all references to Solium

* Updated mocks to make the pass the new linter rules.

* Reformatted the .solhint.json file a bit.

* Removed Solium configuration files.

* Remove Solium dependency.

* Add comment explaing disabled time rule in TokenVesting.

* Revert to the old (ugly?) style.

* Revert SignatureBouncerMock style.

* Fix ERC165InterfacesSupported interface.
2019-01-04 17:01:52 -03:00
35d70397b6 Rename WhitelisterRole to WhitelistAdminRole. (#1589)
* Rename WhitelisterRole to WhitelistAdminRole.

* Update WhitelistAdmin changelog entry.
2019-01-04 15:32:24 -03:00
a5b14f262e Separate unsigned and signed safemath libraries (#1588)
* separate unsigned and signed safemath libraries

* update changelog entry for SignedSafeMath
2019-01-04 14:57:04 -03:00
350aae09d2 BigNumber comparison improved (#1581)
* signing prefix added

* Minor improvement

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* conflict fixes

* added examples

* fixes #706

* linting

* fixes #204

* file fixing

* deep bignumber comparison removed

* Update SafeERC20Helper.sol

* Update IERC20.sol

* Update SafeERC20.sol

* Update package-lock.json

* Revert "deep bignumber comparison removed"

This reverts commit 230b27214f.
2019-01-04 13:47:25 -03:00
63ce358f30 Renamed DetailedERC20Mock.sol to ERC20DetailedMock.sol (#1578) 2018-12-28 16:57:05 -03:00
40f08a8c0b Release candidate v2.1.0-rc.2 2018-12-27 16:25:02 -03:00
8c20d53789 Updated changelog to reflect 0.5 support. 2018-12-27 16:24:38 -03:00
576b020384 Merge branch 'release-v2.1.0-solc-0.5' into release-v2.1.0 2018-12-27 16:12:03 -03:00
13eff70112 Updated PausableCrowdsale to require solc ^0.4.24 (#1567)
(cherry picked from commit 73cbad2f78)
2018-12-27 16:09:58 -03:00
daa301fef0 remove note about 2.0 being experimental (#1565)
(cherry picked from commit 503674167d)
2018-12-27 16:09:31 -03:00
4b8fcbcee1 remove linux-specific mktemp usage (#1571)
(cherry picked from commit 7361ffd26b)
2018-12-22 17:15:43 -03:00
7361ffd26b remove linux-specific mktemp usage (#1571) 2018-12-22 17:10:44 -03:00
be5ed7364b Release v2.1.0 solc 0.5.x (#1568)
* Now compiling in a separate directory using truffle 5.

* Ported to 0.5.1, now compiling using 0.5.1.

* test now also compiles using the truffle 5 hack.

* Downgraded to 0.5.0.

* Sorted scripts.

* Cleaned up the compile script a bit.
2018-12-20 12:26:43 -03:00
73cbad2f78 Updated PausableCrowdsale to require solc ^0.4.24 (#1567) 2018-12-19 14:19:18 -03:00
02f9727dd8 Release candidate v2.1.0-rc.1 2018-12-18 17:31:32 -03:00
503674167d remove note about 2.0 being experimental (#1565) 2018-12-18 17:11:25 -03:00
54ceedbb1f Made the Crowdsale's constructor public again. (#1564)
* Made the Crowdsale's constructor public again.

* Added changelog entry.

* Made all but Finalizable public.
2018-12-18 16:19:48 -03:00
d17ae0b806 Signed SafeMath (#1559)
* signed safe math

* fix lint errors

* refactor overflow checks and add descriptions

* remove incorrect description

* add test for reversed arguments in multiplication test

* fix power operator

* improve multiplication test descriptions

* Update SafeMath.test.js

* add feature to changelog
2018-12-18 15:54:44 -03:00
fad30c3d2c Added changelog. (#1555)
* Added changelog.

* Added PR template note.

* Update .github/PULL_REQUEST_TEMPLATE.md

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Update PULL_REQUEST_TEMPLATE.md

* Update CHANGELOG.md

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Update CHANGELOG.md

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Apply suggestions from code review

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Added more headers and sub-headers.

* Added deprecations category.

* Added PR links.

* Added PausableCrowdsale.

* Addressed review comments.

* Update CHANGELOG.md

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>
2018-12-18 14:26:23 -03:00
8056433c44 Added PausableCrowdsale contract (#832)
* Added PausableCrowdsale contract

* Changed inheritance order to prevent "Linearization of inheritance graph impossible" error

* Updated mock PausableCrowdsaleImpl to new constructor syntax

* Broke function definition to multiple lines

Comply with new max line length

* Rename events to past-tense in PausableCrowdsale test

* Removed should.be.fullfilled from PausableCrowdsale tests

* Change import assertRevert to require in PausableCrowdsale tests

* Remove dependency on chai-as-promised and added BigNumber support in PausableCrowdsale tests

* reindent solidity with 4 spaces

* add missing view modifier in _preValidatePurchase

* convert assertRevert to new shoulFail helper

* add new setup helper

* use expectEvent

* convert to assert to chai should style

* add description to beforeEach blocks

* extract common step to beforeEach

* improve documentation

* revert inheritance error

* move PausableCrowdsale into crowdsale/validation

* make documentation more specific

* put whitespace in line with convention

* improve test suite account names

* undo beforeEach descriptions

* simplify tests

* fix transaction senders to be the anyone account

* make transaction senders more explicit

* remove mocha only
2018-12-14 12:35:38 -03:00
12533bcb2b ERC721 bugfix + gas optimizations (#1549)
* Now only swapping when needed.

* Removed _addTokenTo and _removeTokenFrom

* Removed removeTokenFrom test.

* Added tests for ERC721 _mint and _burn

* _burn now uses the same swap and pop mechanism as _removeFromOwner

* Gas optimization on burn
2018-12-12 18:51:43 -03:00
2da19eebd3 Update Arrays.sol to require solc 0.4.24. (#1553) 2018-12-12 17:38:26 -03:00
a99b9da3d4 Automate build step (#1551)
* remove note that was fixed in #1526

* add build script

* add prepack script

* remove custom compilation steps
2018-12-12 15:36:00 -03:00
7142e25e78 Add back WhitelistedCrowdsale (#1525)
* Added WhitelisterRole.

* Added WhitelisteeRole and WhitelistedCrowdsale.

* Added WhitelistedCrowdsale tests.

* Whitelisters can now remove Whitelistees.

* PublicRole.behavior now supports a manager account, added Whitelistee tests.

* Rephrased tests, added test for whitelistees doing invalid purchases.

* Fixed linter error.

* Fixed typos

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Working around JS quirks

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Update PublicRole.behavior.js

* Renamed WhitelisteeRole to WhitelistedRole.

* Renamed WhitelistedCrowdsale to WhitelistCrowdsale.

* Now using the new test helper.

* Added basic documentation.
2018-12-12 14:46:07 -03:00
dd2e947976 Deprecated ERC721._burn(address, uint256) (#1550)
* Deprecated ERC721._burn(address, uint256)

* Added missing natspec comment.
2018-12-11 18:07:59 -03:00
357fded2b5 Refundable post delivery crowdsale (#1543)
* Fixed unnecessary dependency of RefundableCrowdsaleImpl on ERC20Mintable.

* Added PostDeliveryRefundableCrowdsale.

* Renamed to RefundablePostDeliveryCrowdsale.

* Added deprecation warning.
2018-12-11 18:07:24 -03:00
70e616db7c Optimized ERC721 transfers. (#1539)
* Added _transferToken.

* _transferFrom is now usable by derived contracts, abstracted away enumerable behavior.

* Removed unnecesary check from _clearApprovals
2018-12-11 12:51:26 -03:00
70fd243e3b Test setup helper added (#1482)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* conflict fixes

* fixes #1205

* minor change

* suggested changes

* reviewed changes

* final update
2018-12-07 13:32:48 -03:00
5caecf548c getter added for an array of tokens held by an owner (#1522)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* conflict fixes

* fixes #1512

* Update test/token/ERC721/ERC721Full.test.js

Co-Authored-By: Aniket-Engg <30843294+Aniket-Engg@users.noreply.github.com>
2018-12-05 17:45:27 -03:00
b7d56d5471 Added explicity pify dep, deprecating web3.eth. (#1532)
* Added explicity pify dep, deprecating web3.eth.

* Dropped promisify in favor of pify.
2018-12-03 19:15:30 -03:00
41c540fb1e Update to ganache-cli@6.1.8 (#1535) 2018-12-03 18:07:37 -03:00
e7d6e86395 Make Truffle provider creation lazy (#1526)
* make provider creation lazy

* change getter for function

* remove unused networks from truffle config

* remove unused dotenv package

* remove truffle-hdwallet-provider dependency

* install ethereumjs-util

* replace sha3 with keccak256 for ethereumjs-util v6
2018-12-02 00:09:58 -03:00
c0bda4db88 Updated sendTransaction, added tests. (#1528)
* Renamed sendTransaction to send, improved API.

* Added send tests.

* Now using promisified web3
2018-12-01 02:47:32 -03:00
88e8c7c94b Updated eslint-mocha-no-only. (#1533) 2018-12-01 01:43:25 -03:00
9faebb5365 Added makeInterfaceId tests. (#1530) 2018-11-29 23:10:03 -03:00
714ab21a6e Added mocha-no-only ESlint plugin. (#1529) 2018-11-29 19:10:43 -03:00
8dae261d20 Deleted transactionMined (unused). (#1527) 2018-11-29 19:09:36 -03:00
6fd0010325 Moved advanceBlock to time. (#1523)
* Added advanceBlock to time, moved tests around.

* Removed the standalone advanceBlock.

* Removed the 'id' field

* Fixed linter error.

* Removed the 'latest' test, since it only works if time hasn't been fast-forwarded.

* Removed .only directive.
2018-11-29 18:23:20 -03:00
7ef2730506 Approval events on transferFrom and burnFrom (#1524)
* transferFrom now emits an Approval event, indicating the updated allowance.

* Updated burnFrom to also emit Approval.

* Added notices about the extra Approval events.
2018-11-29 12:06:47 -03:00
6407d7818d Added time helper tests. (#1521)
* Added time tests.

* Minor improvements.
2018-11-27 19:21:08 -03:00
c2de8ffd14 Now testing events in constructors! (#1511)
* Added inTransaction tests.

* Added expectEvent.inConstructor.

* Changed inTransaction, removed decodeLogs.

* Flipped comparison to improve the error message.

* Improved expectEvent tests.

* Migrated tests to use expectEvent.

* Added roles constructor tests.

* Fixed linter errors.

* Made lodash a dev dependency.

* Added more inLogs tests.

* Update expectEvent.test.js

* Removed lodash.

* Moved role constructor tests to public role behavior.

* Revert "Flipped comparison to improve the error message."

This reverts commit 438c57833d.

* Replaced chai-as-promised with shouldFail.
2018-11-27 17:56:26 -03:00
f0e12d5301 ether and shouldFail tests (#1513)
* Added ether tests.

* Added shouldFail base function and tests.

* Updated test descriptions.

* Reduced gas limit on out-of-gas tests.
2018-11-27 17:20:21 -03:00
21ed6bee25 Travis migration (#1517)
* Rolled back Travis stages

* Rolled back the rolled-back changes.

* Renamed jobs, coverage can no longer fail.

* Cleaned up the yaml file a bit.

* Updated coveralls badge.
2018-11-26 17:41:38 -03:00
b9793abec6 balanceDifference tests and application (#1514)
* Added balanceDifference tests.

* Added balanceDifference tests.

* Now using balanceDifference in all (most) tests.

* Fixed typo.
2018-11-26 15:41:39 -03:00
5471fc808a Updated code style to 4 space indentation and 120 characters per line. (#1508)
* Updated code style to 4 spaces and 120 max characters per line.

* Update contracts/token/ERC721/ERC721Pausable.sol

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Update contracts/token/ERC721/IERC721.sol

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>
2018-11-22 16:53:30 -03:00
281338409b Test description fix in ERC20Pausable.test.js (#1501)
Small change in test description, should be "allows to approve..." instead of "allow to transfer..." in approve section, where test actualy try to approve, not to transfer.
2018-11-22 12:01:17 -03:00
a833c4b4ee Merge branch 'release-v2.0.0' 2018-11-20 16:28:52 -03:00
bb6a24e6aa Renamed roles private variables to adhere to code style. (#1507) 2018-11-20 16:03:22 -03:00
83bc045a56 Remove extraneous quantity check, fixes #1454 (#1455) 2018-11-02 07:16:35 -03:00
6363a776f7 Remove redundant require statements (#1409)
* Remove redundant require statements

Now that SafeMath uses require, the require statements are redundant. They were also previously inconsistent because they were only included in some functions, but not others

* Update ERC20.sol
2018-11-02 07:14:06 -03:00
f72c79d54a Add the step to delete the build dir to the RELEASE notes (#1467) 2018-11-02 06:59:05 -03:00
32bc7a6fe5 add an address typecast to this per issue #1457 (#1471) 2018-11-02 06:56:50 -03:00
1186520617 add improvement in simpletoken example #1458 (#1473)
* add improvement in simpletoken example #1458

* fix not calling decimals get function in initial supply
2018-11-01 16:16:21 -03:00
b5892a2b5e SafeMath Test Coverage Improved (#1477)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* conflict fixes

* fixes #1386

* Update SafeMath.test.js
2018-11-01 16:02:36 -03:00
4f356e35a9 The beneficiary parameter of claimRefund is replaced with refundee (#1481)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* conflict fixes

* fixes #1456
2018-11-01 15:38:54 -03:00
79eb94d3cd fix ERC20.sol#L174 and ERC20.sol#L187 should be casted to an address type. (#1470) 2018-11-01 15:27:51 -03:00
18552a8d5f Fix/add comment erc721 burnable #1464 (#1469)
* fix Add a comment to ERC721Enumerable #1465

* fix Add comments to ERC721Burnable #1464
2018-11-01 15:15:04 -03:00
06e265b38d Release v2.0.0 2018-10-21 15:33:49 +00:00
7789814606 Release candidate v2.0.0-rc.4 2018-10-21 00:54:34 +00:00
643ac86d0a Improved some ERC721 internal shenanigans (#1450)
* Made _clearApproval private, added clarifying comments in _addTokenTo and _removeTokenFrom.

* Added approval information.

(cherry picked from commit 8204f6a71f)
2018-10-20 22:15:00 +00:00
ae339333d7 Add warning about trading tokens before refundable crowdsale goal is met (#1452)
This attack was reported in https://github.com/OpenZeppelin/openzeppelin-solidity/issues/877

(cherry picked from commit 80458ebc72)
2018-10-20 22:13:08 +00:00
1a4009f817 Crowdsale.buyTokens is now nonReentrant. (#1438)
(cherry picked from commit 6d415c508b)
2018-10-20 22:13:02 +00:00
ecae7608f9 InitialRate must be strictly larger than finalRate. (#1441)
(cherry picked from commit a936cbf5fb)
2018-10-20 22:12:55 +00:00
47b5d61844 Fixed how allowance crowdsale checks remaining tokens. (#1449)
(cherry picked from commit 1ac1ac984e)
2018-10-20 22:12:48 +00:00
984fe23a46 Deleted unnecessary import. (#1437)
* Deleted unnecessary import.

* Added back SafeMath.

* Removed another unnecessary import.

(cherry picked from commit bbe804a14b)
2018-10-20 22:09:30 +00:00
5cdf4de1f6 Made SampleCrowdsale a bit clearer. (#1448) 2018-10-20 22:09:22 +00:00
a9bffb3787 Now setting the finalized flag before doing finalization to prevent possbile reentrancy issues. (#1447)
(cherry picked from commit 5bb865218f)
2018-10-20 22:09:12 +00:00
6e53c4e129 Crowdsale docs improvements. (#1446)
* Added a small Crowdsale fallback gas warning.

* Fixed a couple typos.

(cherry picked from commit 94692acb14)
2018-10-20 22:09:04 +00:00
95411da289 Renamed internal ERC721 check function. (#1445)
(cherry picked from commit 384dff9abe)
2018-10-20 22:08:49 +00:00
e237530538 Made tokenURI external, as per the spec. (#1444)
(cherry picked from commit 5bf3907862)
2018-10-20 22:08:40 +00:00
0ead40ae03 ERC20Capped now capps _all_ minting, even internal calls. (#1443)
(cherry picked from commit c8220aeea8)
2018-10-20 22:08:34 +00:00
2e848e12d1 IncPriceCrowdsale consistently returns 0 outside of the crowdsale window. (#1442)
(cherry picked from commit 9155bfe27f)
2018-10-20 22:08:27 +00:00
6e055019d4 Closing time must be strictly after opening time. (#1440)
(cherry picked from commit 1c5f16ae26)
2018-10-20 22:08:18 +00:00
5ee55c4af3 Internal crowdsales (#1439)
* Made some internal crowdsale methods internal.

* Made all Crowdsale constructors internal.

(cherry picked from commit d9fdffe88e)
2018-10-20 22:07:59 +00:00
1b27b4bb34 Improved SafeERC20 allowance handling (#1407)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* allowance methods in library

* Improved SafeERC20 tests.

* Fixed test coverage.

(cherry picked from commit 315f426f5c)
2018-10-20 22:07:38 +00:00
4115686b4f TokenVesting improvements (#1431)
* Improved TokenVesting events.

* Added extra checks to TokenVesting.

* Renamed the events.

* Fixed linter error.

* Fixed a test that failed to cover a require.

* Renamed TokensRevoked to TokenVestingRevoked.

(cherry picked from commit 67dac7ae99)
2018-10-20 22:07:00 +00:00
6db4f0bc8f SplitPayment improvements (#1417)
* Renamed file, added events and set _addPayee to private

* unwanted file

* adjusted test

* adjusted test

* PaymentReceived event added

* Added event testing.

* Fix static tests

(cherry picked from commit a07499796a)
2018-10-20 22:06:40 +00:00
5f3ecd9c64 Added address of pauser/unpauser in events (#1410)
* Added address of pauser/unpauser in events

* Added the account to the Pausable tests.

(cherry picked from commit fcab9c89f2)
2018-10-20 22:06:24 +00:00
c126e3e81a Events added to Secondary (#1425)
* Update contracts/ownership/Secondary.sol

* Update Secondary.sol

* Update Secondary.test.js

* Update Secondary.test.js

* Update Secondary.sol

(cherry picked from commit cbe414864f)
2018-10-20 22:06:10 +00:00
ab932e1873 Added leading underscore to internal functions, renamed supportsInterfaces. (#1435)
(cherry picked from commit 0231fac514)
2018-10-20 22:05:51 +00:00
4394107660 Added replay attack notice to SignatureBouncer. (#1434)
(cherry picked from commit ff0c048ad9)
2018-10-20 22:05:31 +00:00
422b42bb6a Made some inherit-only contracts internal. (#1433)
* Made some inherit-only contracts internal.

* Added OwnableMock.

(cherry picked from commit 96d6103e0b)
2018-10-20 22:05:15 +00:00
3b34436b44 Made some TokenVesting public functions private. (#1427)
* Made some TokenVesting public functions private.

* Fixed linter error.

(cherry picked from commit df3c113711)
2018-10-20 22:05:01 +00:00
c5a8680a9c Moved Escrows into an escrow subdirectory, improved docs. (#1430)
* Moved Escrows into an escrow subdirectory, improved docs.

* Fixed escrow mock.

* Fixed some more imports.

(cherry picked from commit f3df2dab3d)
2018-10-20 22:04:33 +00:00
88f48be287 Removed default value assignments. (#1432)
(cherry picked from commit cfef58361f)
2018-10-20 22:04:11 +00:00
26f9cc8e74 Moved some test files around to better reflect the directory layout. (#1428)
(cherry picked from commit d8ab8a00f2)
2018-10-20 22:03:46 +00:00
56806bb295 Now using hex for asm memory addresses. (#1429)
(cherry picked from commit 2733cb4a41)
2018-10-20 22:03:14 +00:00
1cf96ef0d1 Make state variables private (#1426)
* added function to renounce ownership

* Make state variables private (#1411)

(cherry picked from commit 03765e08b9)
2018-10-20 22:02:36 +00:00
5d596fc786 Added Math.sol docstrings. (#1423)
(cherry picked from commit a3e312d133)
2018-10-20 22:02:08 +00:00
2514959f34 Fixed a typo in a comment. (#1422)
(cherry picked from commit 3341dd8899)
2018-10-20 22:01:54 +00:00
1b79b536cd Roles.add and remove now require pre-conditions on the account. (#1421)
(cherry picked from commit 3bd30f7382)
2018-10-20 22:01:22 +00:00
e990525c2e RefundEscrow's events renamed (#1418)
* fixes #1414

(cherry picked from commit 844a96d0b9)
2018-10-20 22:00:49 +00:00
2c40ffa011 Improve encapsulation on ERC165 and update code style guide (#1379)
* use prefix underscore for internal state variables

* make _supportedInterfaces private

(cherry picked from commit 03dfb2965c)
2018-10-20 22:00:13 +00:00
10a5864fdf First test helpers tests (#1369)
* Removed unused advanceToBlock.

* Added advanceBlock tests.

* Fixed advanceToBlock tests.

* Added single argument tests.

* Finished inLogs tests.

* Fixed linter errors.

* Fixed linter errors.

(cherry picked from commit 9f822906b8)
2018-10-20 21:59:32 +00:00
7ec6079784 Fix typo in ARCHITECTURE.md (#1406)
(cherry picked from commit eb92fd1f48)
2018-10-20 21:57:17 +00:00
5e82a64a01 Add a code style rule to make all state variables private (#1390)
(cherry picked from commit 076cb7decd)
2018-10-20 21:56:56 +00:00
3266de1b5c Non-constructor initialization removed (#1403)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1391

(cherry picked from commit da67e435b1)
2018-10-20 21:56:18 +00:00
7cd0d5a452 Replaced assertJump, assertRevert and expectThrow with shouldFail. (#1363)
* Replaced assertJump, assertRevert and expectThrow with shouldFail.

* Fixed linter errors.

* Fixed typo.

* Made the helpers async.

(cherry picked from commit b0da0fded0)
2018-10-20 21:54:50 +00:00
620d524398 Improves Ownable events (#1397)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1392

* event tests added

* constructor event added

(cherry picked from commit af42c39e6c)
2018-10-20 21:53:33 +00:00
eae40c93b6 this is used in tests (#1380)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1200

* suggested change

(cherry picked from commit b41b125c15)
2018-10-20 21:35:26 +00:00
109eba9273 Replaces amount with value for consistency (#1378)
* fixes #1372

* done in ERC20Capped and ERC20Mintable

(cherry picked from commit fd4de77651)
2018-10-20 21:32:45 +00:00
13fb1f662a Fixed test path.
(cherry picked from commit f4d6f40442)
2018-10-20 21:31:48 +00:00
2f3f0d3c8a Created test utils directory
(cherry picked from commit 269981ee6a)
2018-10-20 21:31:34 +00:00
0678f67289 Merged latestTime, increaseTime and duration into a time helper. (#1364)
(cherry picked from commit 34bc709bc2)
2018-10-20 21:31:21 +00:00
b03932529c Fix/#1355 test helper to check balance difference (#1368)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* fixex #1355

* linting

* suggested changes

* Update BreakInvariantBounty.test.js

(cherry picked from commit 6ae041bca6)
2018-10-20 21:30:15 +00:00
c25a1e366f Fix #1358 Test helper to send funds (#1367)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* fixes #1358

* linting done

* suggested changes

(cherry picked from commit fa1dfbd113)
2018-10-20 21:29:21 +00:00
598a0358fc Dangling commas are now required. (#1359)
(cherry picked from commit a6889776f4)
2018-10-20 21:23:12 +00:00
39db4b4b05 Feature/use expect event in test logs assertions #1232 (#1343)
* Add BigNumber support to expectEvent/inLogs (#1026)

* switched direct logs array check to expectEvent method in AllowanceCrowdsale.test.js

* Refactor expectEvent.inLogs function to use simple value number check

* Introduced should.be.bignumber method to compare BigNumber values

* Use expectEvent to test logs (#1232)

* Removed trailing space

(cherry picked from commit 536262f2ec)
2018-10-20 21:22:54 +00:00
a9af619c59 Add BigNumber support to expectEvent/inLogs (#1026) (#1338)
* Add BigNumber support to expectEvent/inLogs (#1026)

* switched direct logs array check to expectEvent method in AllowanceCrowdsale.test.js

* Refactor expectEvent.inLogs function to use simple value number check

* Introduced should.be.bignumber method to compare BigNumber values

* Destructure transaction object to extract logs field

(cherry picked from commit 947de54cee)
2018-10-20 21:22:05 +00:00
62ed8e2fe4 Removed BreakInvariantBounty. (#1424)
(cherry picked from commit 9be0f100c4)
2018-10-20 21:20:57 +00:00
e7aa8dedbc Turn off blank-lines Solium rule (#1284)
* turn off blank-lines rule

* remove triple newlines

(cherry picked from commit 9b37104655)
2018-10-20 21:07:49 +00:00
49d2dd9e08 Add Mock suffix to variable names #1172 (#1324)
* Add Mock suffix to variable names #1172

* Add Impl suffix to variable names

(cherry picked from commit 4b21fcf5af)
2018-10-20 20:59:51 +00:00
a3bb56769e Remove lodash from tests (#1323)
(cherry picked from commit d062352de7)
2018-10-20 20:59:13 +00:00
f8b0cec15b Add unit test specific to Address utils (#1251) (#1316)
(cherry picked from commit 7825caa1fd)
2018-10-20 20:57:15 +00:00
7ea34d9e97 Update ERC20.sol (#1313)
correct typo in doc

(cherry picked from commit b644c72eb0)
2018-10-20 20:56:34 +00:00
2a8146a45d Fix README snippet typo
(cherry picked from commit 0b8296e525)
2018-10-20 20:55:59 +00:00
2e14386eda fix readme snippet so it is concrete
(cherry picked from commit 651f6d8b57)
2018-10-20 20:54:53 +00:00
80458ebc72 Add warning about trading tokens before refundable crowdsale goal is met (#1452)
This attack was reported in https://github.com/OpenZeppelin/openzeppelin-solidity/issues/877
2018-10-19 17:35:04 -06:00
6d415c508b Crowdsale.buyTokens is now nonReentrant. (#1438) 2018-10-19 14:42:20 -06:00
a936cbf5fb InitialRate must be strictly larger than finalRate. (#1441) 2018-10-19 12:37:24 -06:00
1ac1ac984e Fixed how allowance crowdsale checks remaining tokens. (#1449) 2018-10-19 12:12:16 -06:00
8204f6a71f Improved some ERC721 internal shenanigans (#1450)
* Made _clearApproval private, added clarifying comments in _addTokenTo and _removeTokenFrom.

* Added approval information.
2018-10-18 19:07:34 -03:00
9f5b73df37 added a test helper with common constants (#1400)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1206

(cherry picked from commit 58a42443df)
2018-10-18 19:05:17 -03:00
a811a0be28 Improves Ownable events (#1397)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1392

* event tests added

* constructor event added

(cherry picked from commit af42c39e6c)
2018-10-18 19:03:56 -03:00
9c76d28245 Added a constructor to BreakInvariantBounty. (#1395)
(cherry picked from commit 3acc2b4216)
2018-10-18 19:02:57 -03:00
8d6250cd5a Add Arrays library with unit tests (#1209) (#1375)
*     Add Arrays library with unit tests (#1209)

    * prepared due to snapshot token requirements
    * add library with method to find upper bound
    * add unit test for basic and edge cases

* Imporove documentation for Arrays library

Simplify Arrays.test.js to use short arrays as test date

* Added comment for uint256 mid variable.
* Explaned why uint256 mid variable calculated as Math.average is safe to use as index of array.

(cherry picked from commit f7e53d90fa)
2018-10-18 19:02:50 -03:00
66bad4ff2a Removed selfdestruct from BreakInvariantBounty (#1385)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1384

* introduced claimable and cancelBounty

* cancelBounty tests

* Update BreakInvariantBounty.test.js

(cherry picked from commit 41f84f8b40)
2018-10-18 19:02:42 -03:00
41e74dd8d8 Removed old, unused mocks. (#1382)
(cherry picked from commit b17de011dc)
2018-10-18 18:53:09 -03:00
bbe804a14b Deleted unnecessary import. (#1437)
* Deleted unnecessary import.

* Added back SafeMath.

* Removed another unnecessary import.
2018-10-18 18:43:44 -03:00
28cf567e41 Made SampleCrowdsale a bit clearer. (#1448) 2018-10-18 18:43:12 -03:00
5bb865218f Now setting the finalized flag before doing finalization to prevent possbile reentrancy issues. (#1447) 2018-10-18 18:42:57 -03:00
94692acb14 Crowdsale docs improvements. (#1446)
* Added a small Crowdsale fallback gas warning.

* Fixed a couple typos.
2018-10-18 16:57:16 -03:00
384dff9abe Renamed internal ERC721 check function. (#1445) 2018-10-18 16:56:58 -03:00
5bf3907862 Made tokenURI external, as per the spec. (#1444) 2018-10-18 16:49:46 -03:00
c8220aeea8 ERC20Capped now capps _all_ minting, even internal calls. (#1443) 2018-10-18 16:49:31 -03:00
9155bfe27f IncPriceCrowdsale consistently returns 0 outside of the crowdsale window. (#1442) 2018-10-18 16:36:27 -03:00
1c5f16ae26 Closing time must be strictly after opening time. (#1440) 2018-10-18 16:36:11 -03:00
d9fdffe88e Internal crowdsales (#1439)
* Made some internal crowdsale methods internal.

* Made all Crowdsale constructors internal.
2018-10-18 16:35:57 -03:00
315f426f5c Improved SafeERC20 allowance handling (#1407)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* allowance methods in library

* Improved SafeERC20 tests.

* Fixed test coverage.
2018-10-18 12:25:03 -03:00
67dac7ae99 TokenVesting improvements (#1431)
* Improved TokenVesting events.

* Added extra checks to TokenVesting.

* Renamed the events.

* Fixed linter error.

* Fixed a test that failed to cover a require.

* Renamed TokensRevoked to TokenVestingRevoked.
2018-10-18 11:27:46 -03:00
a07499796a SplitPayment improvements (#1417)
* Renamed file, added events and set _addPayee to private

* unwanted file

* adjusted test

* adjusted test

* PaymentReceived event added

* Added event testing.

* Fix static tests
2018-10-18 11:26:54 -03:00
fcab9c89f2 Added address of pauser/unpauser in events (#1410)
* Added address of pauser/unpauser in events

* Added the account to the Pausable tests.
2018-10-18 11:26:39 -03:00
cbe414864f Events added to Secondary (#1425)
* Update contracts/ownership/Secondary.sol

* Update Secondary.sol

* Update Secondary.test.js

* Update Secondary.test.js

* Update Secondary.sol
2018-10-18 11:00:33 -03:00
0231fac514 Added leading underscore to internal functions, renamed supportsInterfaces. (#1435) 2018-10-18 10:49:01 -03:00
ff0c048ad9 Added replay attack notice to SignatureBouncer. (#1434) 2018-10-18 10:47:55 -03:00
96d6103e0b Made some inherit-only contracts internal. (#1433)
* Made some inherit-only contracts internal.

* Added OwnableMock.
2018-10-18 10:47:35 -03:00
df3c113711 Made some TokenVesting public functions private. (#1427)
* Made some TokenVesting public functions private.

* Fixed linter error.
2018-10-17 18:18:41 -03:00
f3df2dab3d Moved Escrows into an escrow subdirectory, improved docs. (#1430)
* Moved Escrows into an escrow subdirectory, improved docs.

* Fixed escrow mock.

* Fixed some more imports.
2018-10-17 17:22:25 -03:00
cfef58361f Removed default value assignments. (#1432) 2018-10-17 17:00:12 -03:00
d8ab8a00f2 Moved some test files around to better reflect the directory layout. (#1428) 2018-10-17 16:58:49 -03:00
2733cb4a41 Now using hex for asm memory addresses. (#1429) 2018-10-17 16:58:36 -03:00
03765e08b9 Make state variables private (#1426)
* added function to renounce ownership

* Make state variables private (#1411)
2018-10-17 11:35:31 -03:00
9be0f100c4 Removed BreakInvariantBounty. (#1424) 2018-10-16 17:21:24 -03:00
a3e312d133 Added Math.sol docstrings. (#1423) 2018-10-16 17:21:08 -03:00
3341dd8899 Fixed a typo in a comment. (#1422) 2018-10-16 17:20:55 -03:00
3bd30f7382 Roles.add and remove now require pre-conditions on the account. (#1421) 2018-10-16 17:20:33 -03:00
844a96d0b9 RefundEscrow's events renamed (#1418)
* fixes #1414
2018-10-16 10:37:04 -03:00
03dfb2965c Improve encapsulation on ERC165 and update code style guide (#1379)
* use prefix underscore for internal state variables

* make _supportedInterfaces private
2018-10-12 19:13:35 -03:00
9f822906b8 First test helpers tests (#1369)
* Removed unused advanceToBlock.

* Added advanceBlock tests.

* Fixed advanceToBlock tests.

* Added single argument tests.

* Finished inLogs tests.

* Fixed linter errors.

* Fixed linter errors.
2018-10-10 20:55:10 -03:00
eb92fd1f48 Fix typo in ARCHITECTURE.md (#1406) 2018-10-10 15:15:38 -03:00
076cb7decd Add a code style rule to make all state variables private (#1390) 2018-10-10 12:06:22 -06:00
da67e435b1 Non-constructor initialization removed (#1403)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1391
2018-10-10 09:33:26 -03:00
b0da0fded0 Replaced assertJump, assertRevert and expectThrow with shouldFail. (#1363)
* Replaced assertJump, assertRevert and expectThrow with shouldFail.

* Fixed linter errors.

* Fixed typo.

* Made the helpers async.
2018-10-09 16:23:55 -03:00
58a42443df added a test helper with common constants (#1400)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1206
2018-10-09 15:46:09 -03:00
af42c39e6c Improves Ownable events (#1397)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1392

* event tests added

* constructor event added
2018-10-09 13:32:45 -03:00
3acc2b4216 Added a constructor to BreakInvariantBounty. (#1395) 2018-10-08 17:01:35 -06:00
f7e53d90fa Add Arrays library with unit tests (#1209) (#1375)
*     Add Arrays library with unit tests (#1209)

    * prepared due to snapshot token requirements
    * add library with method to find upper bound
    * add unit test for basic and edge cases

* Imporove documentation for Arrays library

Simplify Arrays.test.js to use short arrays as test date

* Added comment for uint256 mid variable.
* Explaned why uint256 mid variable calculated as Math.average is safe to use as index of array.
2018-10-08 11:01:33 -03:00
41f84f8b40 Removed selfdestruct from BreakInvariantBounty (#1385)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1384

* introduced claimable and cancelBounty

* cancelBounty tests

* Update BreakInvariantBounty.test.js
2018-10-08 10:51:06 -03:00
b17de011dc Removed old, unused mocks. (#1382) 2018-10-05 19:18:59 -06:00
2d30918149 Release candidate v2.0.0-rc.3 2018-10-04 11:17:57 -03:00
0db1f8144d Removed unnecessary Secondary inheritance from RefundEscrow. (#1381)
(cherry picked from commit 308e5e9cc0)
2018-10-04 11:15:53 -03:00
308e5e9cc0 Removed unnecessary Secondary inheritance from RefundEscrow. (#1381) 2018-10-04 11:15:22 -03:00
ffeae0d83e ERC20 internal transfer method (#1370)
(cherry picked from commit 43ebb4fc43)
2018-10-04 11:14:05 -03:00
38ca422170 Removing unrequired _burn() override (#1373)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1371

* Removed extra whitespace

(cherry picked from commit f3888bb0b0)
2018-10-04 11:13:05 -03:00
7c984968d8 Prevents Bounty from being claimed twice (#1374)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1356

* Removed extra semicolon.

(cherry picked from commit c87433e0c2)
2018-10-04 11:12:45 -03:00
bd8345a153 Separate ERC721Mintable (#1365)
* separate part of ERC721Mintable into ERC721MetadataMintable

* remove mint and burn from 721 tests

* Fixed linter error.

* fix ERC721 mint tests

* Minor fixes.

(cherry picked from commit 744f567f40)
2018-10-04 11:12:05 -03:00
744f567f40 Separate ERC721Mintable (#1365)
* separate part of ERC721Mintable into ERC721MetadataMintable

* remove mint and burn from 721 tests

* Fixed linter error.

* fix ERC721 mint tests

* Minor fixes.
2018-10-04 11:10:08 -03:00
b41b125c15 this is used in tests (#1380)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1200

* suggested change
2018-10-04 09:57:37 -03:00
fd4de77651 Replaces amount with value for consistency (#1378)
* fixes #1372

* done in ERC20Capped and ERC20Mintable
2018-10-04 07:51:52 -03:00
ace14d3ad7 Add note about compiling artifacts to releasing steps (#1377)
* add note about compiling artifacts to release notes

* add explanation of truffle bug
2018-10-03 23:17:06 -03:00
5c228805ad Update issue templates (#1376)
* Update issue templates

* improve pull request template

* remove previous issue template
2018-10-03 23:13:46 -03:00
c87433e0c2 Prevents Bounty from being claimed twice (#1374)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1356

* Removed extra semicolon.
2018-10-03 12:50:01 -03:00
f3888bb0b0 Removing unrequired _burn() override (#1373)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* updates

* fixes #1371

* Removed extra whitespace
2018-10-03 12:23:08 -03:00
43ebb4fc43 ERC20 internal transfer method (#1370) 2018-10-02 18:15:59 -03:00
f4d6f40442 Fixed test path. 2018-10-02 10:48:54 -03:00
269981ee6a Created test utils directory 2018-10-02 10:38:02 -03:00
34bc709bc2 Merged latestTime, increaseTime and duration into a time helper. (#1364) 2018-10-02 07:07:11 -03:00
6ae041bca6 Fix/#1355 test helper to check balance difference (#1368)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* fixex #1355

* linting

* suggested changes

* Update BreakInvariantBounty.test.js
2018-10-01 12:23:47 -03:00
fa1dfbd113 Fix #1358 Test helper to send funds (#1367)
* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776f4.

* fixes #1358

* linting done

* suggested changes
2018-10-01 09:39:57 -03:00
a6889776f4 Dangling commas are now required. (#1359) 2018-09-28 19:20:43 -06:00
76169cda40 Fixed a broken payment test (+ another small fix) (#1318)
* Fixed a broken payment test

* In PR template, npm run lint:fix, not lint:all:fix

* In SplitPayment test, replaced an await-in-loop with Promise.all

(cherry picked from commit b79196f911)
2018-09-28 11:36:06 -03:00
08bf6bbed9 Add missing tests to ECSDA (#1248)
* fix: refactor sign.js and related tests

* fix: remove unused dep

* fix: update package.json correctly

* Add missing tests to ECRecovery

* fix lint

* Reorganize the tests

* Reuse signature

* fix static errors

* Apply suggestions by @frangion and @nventuro

* Remove only

* More suggestions

* Remove unnecessary max-len

* remove only

(cherry picked from commit 75c0a59bb4)
2018-09-28 11:28:46 -03:00
8c394de450 Add SignatureBouncer test for when msg.data is too short (#1360)
* add test for msg.data too short

* fix test to hit that branch

* Update SignatureBouncer.test.js

(cherry picked from commit 1a4e5346ed)
2018-09-28 09:38:48 -03:00
1a4e5346ed Add SignatureBouncer test for when msg.data is too short (#1360)
* add test for msg.data too short

* fix test to hit that branch

* Update SignatureBouncer.test.js
2018-09-27 19:40:18 -03:00
536262f2ec Feature/use expect event in test logs assertions #1232 (#1343)
* Add BigNumber support to expectEvent/inLogs (#1026)

* switched direct logs array check to expectEvent method in AllowanceCrowdsale.test.js

* Refactor expectEvent.inLogs function to use simple value number check

* Introduced should.be.bignumber method to compare BigNumber values

* Use expectEvent to test logs (#1232)

* Removed trailing space
2018-09-27 11:33:28 -03:00
75c0a59bb4 Add missing tests to ECSDA (#1248)
* fix: refactor sign.js and related tests

* fix: remove unused dep

* fix: update package.json correctly

* Add missing tests to ECRecovery

* fix lint

* Reorganize the tests

* Reuse signature

* fix static errors

* Apply suggestions by @frangion and @nventuro

* Remove only

* More suggestions

* Remove unnecessary max-len

* remove only
2018-09-26 17:36:45 -03:00
947de54cee Add BigNumber support to expectEvent/inLogs (#1026) (#1338)
* Add BigNumber support to expectEvent/inLogs (#1026)

* switched direct logs array check to expectEvent method in AllowanceCrowdsale.test.js

* Refactor expectEvent.inLogs function to use simple value number check

* Introduced should.be.bignumber method to compare BigNumber values

* Destructure transaction object to extract logs field
2018-09-26 17:04:41 -03:00
fa5ecd03cb Improved bounty tests. (#1350)
* Improved bounty tests.

* Fixed linter errors.

* Addressed review comments.

(cherry picked from commit ae109f69cc)
2018-09-26 16:37:31 -03:00
ae109f69cc Improved bounty tests. (#1350)
* Improved bounty tests.

* Fixed linter errors.

* Addressed review comments.
2018-09-26 16:32:50 -03:00
1b0c6b94b9 Removed mintingFinished. (#1351)
* Removed mintingFinished from ERC20Mintable.

* Removed MintingFinished from ERC721Mintable.

* Removed MintingFinished event.

(cherry picked from commit 5fdeaa81d5)
2018-09-26 16:06:27 -03:00
5fdeaa81d5 Removed mintingFinished. (#1351)
* Removed mintingFinished from ERC20Mintable.

* Removed MintingFinished from ERC721Mintable.

* Removed MintingFinished event.
2018-09-26 16:05:43 -03:00
652243b7c3 Removed assertions from Escrow and SplitPayment. (#1349)
(cherry picked from commit db2e1d2c74)
2018-09-26 12:57:15 -03:00
db2e1d2c74 Removed assertions from Escrow and SplitPayment. (#1349) 2018-09-26 12:57:02 -03:00
c9e8a66e85 Add the missing test for ERC721Holder (#1249)
* Add the missing test for ERC721Holder

* fix lint

* Move the holder test to a separate file

(cherry picked from commit 396680b856)
2018-09-26 12:15:08 -03:00
e7c99dd7dd Roles now emit events in construction and when renouncing. (#1329)
* release candidate v2.0.0-rc.1

* fix linter error

(cherry picked from commit c12a1c6898)

* Roles now emit events in construction and when renouncing.

(cherry picked from commit 21198bf1c1)
2018-09-26 12:14:34 -03:00
396680b856 Add the missing test for ERC721Holder (#1249)
* Add the missing test for ERC721Holder

* fix lint

* Move the holder test to a separate file
2018-09-26 12:00:08 -03:00
21198bf1c1 Roles now emit events in construction and when renouncing. (#1329)
* release candidate v2.0.0-rc.1

* fix linter error

(cherry picked from commit c12a1c6898)

* Roles now emit events in construction and when renouncing.
2018-09-26 11:36:41 -03:00
9b37104655 Turn off blank-lines Solium rule (#1284)
* turn off blank-lines rule

* remove triple newlines
2018-09-19 19:59:13 -03:00
dac5bccf80 release candidate v2.0.0-rc.2 2018-09-18 19:22:04 -03:00
f22adbb742 Fixed relative imports. (#1321)
(cherry picked from commit 225b492109)
2018-09-18 18:11:55 -03:00
35d92fddaa update Math.sol path (#1319)
(cherry picked from commit d8cbd5554f)
2018-09-18 18:10:11 -03:00
fa739d8af0 Move BreakInvariantBounty to drafts (#1334)
* move BreakInvariantBounty to drafts

* fix bad imports
2018-09-18 18:05:47 -03:00
6c36bc71a7 Changes to Counter (#1332)
* rename Index.currentId to current

* use += operator for clarity

* rename Counter.Index to Counter.Counter

* move Counter to drafts

(cherry picked from commit 3e55408cb5)
2018-09-18 17:44:57 -03:00
658af64edd Rename AutoIncrementing to Counter (#1307)
(cherry picked from commit b4f87bb8fc)
2018-09-18 17:44:43 -03:00
3e55408cb5 Changes to Counter (#1332)
* rename Index.currentId to current

* use += operator for clarity

* rename Counter.Index to Counter.Counter

* move Counter to drafts
2018-09-18 17:42:31 -03:00
4b21fcf5af Add Mock suffix to variable names #1172 (#1324)
* Add Mock suffix to variable names #1172

* Add Impl suffix to variable names
2018-09-18 16:24:51 -03:00
d062352de7 Remove lodash from tests (#1323) 2018-09-17 17:21:01 -03:00
ed84f3fcf3 fix linter error
(cherry picked from commit c12a1c6898)
2018-09-17 11:49:13 -03:00
b4f87bb8fc Rename AutoIncrementing to Counter (#1307) 2018-09-13 05:51:22 -03:00
225b492109 Fixed relative imports. (#1321) 2018-09-12 16:17:47 -03:00
7825caa1fd Add unit test specific to Address utils (#1251) (#1316) 2018-09-12 12:49:00 -03:00
b79196f911 Fixed a broken payment test (+ another small fix) (#1318)
* Fixed a broken payment test

* In PR template, npm run lint:fix, not lint:all:fix

* In SplitPayment test, replaced an await-in-loop with Promise.all
2018-09-11 12:32:05 -03:00
d8cbd5554f update Math.sol path (#1319) 2018-09-11 11:51:11 -03:00
b644c72eb0 Update ERC20.sol (#1313)
correct typo in doc
2018-09-10 12:06:52 -03:00
0b8296e525 Fix README snippet typo 2018-09-07 15:45:29 -03:00
651f6d8b57 fix readme snippet so it is concrete 2018-09-07 15:41:43 -03:00
13b19612d6 add note about trying out 2.0 2018-09-07 15:22:16 -03:00
c12a1c6898 fix linter error 2018-09-07 14:49:33 -03:00
735996e983 release candidate v2.0.0-rc.1 2018-09-07 14:44:01 -03:00
9f1e8086d9 include build directory in package (#1311) 2018-09-07 14:34:57 -03:00
904b41ec79 Improve README (#1309)
* add logo

* new readme

* add large logo

* improve readme

* Update README.md

* add link to guides

* remove leftover sentence
2018-09-07 14:33:38 -03:00
2ce1fde405 Fixed variable shadowing. (#1310) 2018-09-07 14:14:02 -03:00
92133be7ea Add ERC20 opt-in migration contract (#1054)
* Extract standard token behaviuor to reuse it in other tests

* Add opt in ERC20 migration contract

* Make migration contract not to depend from standard token

* Changes based on feedback

* Improve MigratableERC20 inline documentation

* move behaviors to behaviors directory

* refactor MigratableERC20 into ERC20Migrator

* fix errors

* change expectEvent to support multiple events with same name

* fix tests

* update documentation

* rename MigratableERC20 files to ERC20Migrator

* move to drafts

* test beginMigration

* rename to ERC20Migrator

* missing semicolon  (╯°□°)╯︵ ┻━┻

* add non-zero check

* improve documentation based on review comments

* improve test descriptions

* improve docs

* add getters

* fix contract

* improve tests
2018-09-07 14:13:23 -03:00
4b33eaefa2 Improved ERC721 granularity (#1304)
* Split enumerable and metadata implementations.

* Renamed ERC721Basic to ERC721, and ERC721 to ERC721Full.

* Fixed linter errors.
2018-09-07 14:04:42 -03:00
bafdcf0701 Remove CanReclaimToken (#1306) 2018-09-07 14:01:37 -03:00
6cae0f458d Role library now requires non-zero addresses. (#1303)
* The role library now requires non-zero addresses.

* Fixed SignatureBouncer checks with null address.

* change ternary operator for or operator

* adapt to new variable name convention

* Update Roles.sol
2018-09-07 13:32:12 -03:00
fa49e5189d Remove Minted and TokensBurned events (#1305)
* Remove the Minted event

* Remove the TokensBurned event

* Remove unused
2018-09-07 13:31:23 -03:00
6c4c8989b3 Use prefix underscore for state variables and no underscore for parameters (#1282)
* Role tests (#1228)

* Moved RBAC tests to access.

* Added Roles.addMany and tests.

* Fixed linter error.

* Now using uint256 indexes.

* Removed RBAC tokens (#1229)

* Deleted RBACCappedTokenMock.

* Removed RBACMintableToken.

* Removed RBACMintableToken from the MintedCrowdsale tests.

* Roles can now be transfered. (#1235)

* Roles can now be transfered.

* Now explicitly checking support for the null address.

* Now rejecting transfer to a role-haver.

* Added renounce, roles can no longer be transfered to 0.

* Fixed linter errors.

* Fixed a Roles test.

* True Ownership (#1247)

* Added barebones Secondary.

* Added transferPrimary

* Escrow is now Secondary instead of Ownable.

* Now reverting on transfers to 0.

* The Secondary's primary is now private.

* Improve encapsulation on ERC165

* Improve encapsulation on ERC20

* Improve encapsulation on ERC721

* Add tests, use standard getters

* fix tests

* Fix lint

* MintableToken using Roles (#1236)

* Minor test style improvements (#1219)

* Changed .eq to .equal

* Changed equal(bool) to .to.be.bool

* Changed be.bool to equal(bool), disallowed unused expressions.

* Add ERC165Query library (#1086)

* Add ERC165Query library

* Address PR Comments

* Add tests and mocks from #1024 and refactor code slightly

* Fix javascript and solidity linting errors

* Split supportsInterface into three methods as discussed in #1086

* Change InterfaceId_ERC165 comment to match style in the rest of the repo

* Fix max-len lint issue on ERC165Checker.sol

* Conditionally ignore the asserts during solidity-coverage test

* Switch to abi.encodeWithSelector and add test for account addresses

* Switch to supportsInterfaces API as suggested by @frangio

* Adding ERC165InterfacesSupported.sol

* Fix style issues

* Add test for supportsInterfaces returning false

* Add ERC165Checker.sol newline

* feat: fix coverage implementation

* fix: solidity linting error

* fix: revert to using boolean tests instead of require statements

* fix: make supportsERC165Interface private again

* rename SupportsInterfaceWithLookupMock to avoid name clashing

* Added mint and burn tests for zero amounts. (#1230)

* Changed .eq to .equal. (#1231)

* ERC721 pausable token (#1154)

* ERC721 pausable token

* Reuse of ERC721 Basic behavior for Pausable, split view checks in paused state & style fixes

* [~] paused token behavior

* Add some detail to releasing steps (#1190)

* add note about pulling upstream changes to release branch

* add comment about upstream changes in merging section

* Increase test coverage (#1237)

* Fixed a SplitPayment test

* Deleted unnecessary function.

* Improved PostDeliveryCrowdsale tests.

* Improved RefundableCrowdsale tests.

* Improved MintedCrowdsale tests.

* Improved IncreasingPriceCrowdsale tests.

* Fixed a CappedCrowdsale test.

* Improved TimedCrowdsale tests.

* Improved descriptions of added tests.

*  ci: trigger docs update on tag  (#1186)

* MintableToken now uses Roles.

* Fixed FinalizableCrowdsale test.

* Roles can now be transfered.

* Fixed tests related to MintableToken.

* Removed Roles.check.

* Renamed transferMintPermission.

* Moved MinterRole

* Fixed RBAC.

* Adressed review comments.

* Addressed review comments

* Fixed linter errors.

* Added Events tests of Pausable contract (#1207)

* Fixed roles tests.

* Rename events to past-tense (#1181)

* fix: refactor sign.js and related tests (#1243)

* fix: refactor sign.js and related tests

* fix: remove unused dep

* fix: update package.json correctly

* Added "_" sufix to internal variables (#1171)

* Added PublicRole test.

* Fixed crowdsale tests.

* Rename ERC interfaces to I prefix (#1252)

* rename ERC20 to IERC20

* move ERC20.sol to IERC20.sol

* rename StandardToken to ERC20

* rename StandardTokenMock to ERC20Mock

* move StandardToken.sol to ERC20.sol, likewise test and mock files

* rename MintableToken to ERC20Mintable

* move MintableToken.sol to ERC20Mintable.sol, likewise test and mock files

* rename BurnableToken to ERC20Burnable

* move BurnableToken.sol to ERC20Burnable.sol, likewise for related files

* rename CappedToken to ERC20Capped

* move CappedToken.sol to ERC20Capped.sol, likewise for related files

* rename PausableToken to ERC20Pausable

* move PausableToken.sol to ERC20Pausable.sol, likewise for related files

* rename DetailedERC20 to ERC20Detailed

* move DetailedERC20.sol to ERC20Detailed.sol, likewise for related files

* rename ERC721 to IERC721, and likewise for other related interfaces

* move ERC721.sol to IERC721.sol, likewise for other 721 interfaces

* rename ERC721Token to ERC721

* move ERC721Token.sol to ERC721.sol, likewise for related files

* rename ERC721BasicToken to ERC721Basic

* move ERC721BasicToken.sol to ERC721Basic.sol, likewise for related files

* rename ERC721PausableToken to ERC721Pausable

* move ERC721PausableToken.sol to ERC721Pausable.sol

* rename ERC165 to IERC165

* move ERC165.sol to IERC165.sol

* amend comment that ERC20 is based on FirstBlood

* fix comments mentioning IERC721Receiver

* added explicit visibility (#1261)

* Remove underscores from event parameters. (#1258)

* Remove underscores from event parameters.

Fixes #1175

* Add comment about ERC

* Move contracts to subdirectories (#1253)

* Move contracts to subdirectories

Fixes #1177.

This Change also removes the LimitBalance contract.

* fix import

* move MerkleProof to cryptography

* Fix import

* Remove HasNoEther, HasNoTokens, HasNoContracts, and NoOwner (#1254)

* remove HasNoEther, HasNoTokens, HasNoContracts, and NoOwner

* remove unused ERC223TokenMock

* remove Contactable

* remove TokenDestructible

* remove DeprecatedERC721

* inline Destructible#destroy in Bounty

* remove Destructible

* Functions in interfaces changed to "external" (#1263)

* Add a leading underscore to internal and private functions. (#1257)

* Add a leading underscore to internal and private functions.

Fixes #1176

* Remove super

* update the ERC721 changes

* add missing underscore after merge

* Fix mock

* Improve encapsulation on SignatureBouncer, Whitelist and RBAC example (#1265)

* Improve encapsulation on Whitelist

* remove only

* update whitelisted crowdsale test

* Improve encapsulation on SignatureBouncer

* fix missing test

* Improve encapsulation on RBAC example

* Improve encapsulation on RBAC example

* Remove extra visibility

* Improve encapsulation on ERC20 Mintable

* Improve encapsulation on Superuser

* fix lint

* add missing constant

* Addressed review comments.

* Fixed build error.

* move interface ids to implementation contracts

* Do not prefix getters

* Improve encapsulation on Crowdsales

* add missing tests

* remove only

* Improve encapsulation on Pausable

* add the underscore

* Improve encapsulation on ownership

* fix rebase

* fix ownership

* Improve encapsulation on payments

* Add missing tests

* add missing test

* Do not prefix getters

* Do not prefix getters

* Fix tests.

* Update modifiers to call public view functions.

Fixes #1179.

* Improve encapsulation on BreakInvariantBounty

* Make researchers private

* Improve encapsulation on Crowdsales

* add missing tests

* remove only

* Improve encapsulation on Pausable

* add the underscore

* Improve encapsulation on ownership

* fix rebase

* fix ownership

* Improve encapsulation on payments

* Add missing tests

* add missing test

* Do not prefix getters

* Do not prefix getters

* Do not prefix getters

* Fix tests.

* tmp

* remove isMinter

* fix is owner call

* fix isOpen

* Fix merge

* tmp

* Improve encapsulation on TimedCrowdsale

* Add missing parentheses

* Use prefix underscore for state variables and no underscore for parameters

* Improved Roles API. (#1280)

* Improved Roles API.

* fix linter error

* Added PauserRole. (#1283)

* remove duplicate function definition

* Remove Claimable, DelayedClaimable, Heritable (#1274)

* remove Claimable, DelayedClaimable, Heritable

* remove SimpleSavingsWallet example which used Heritable

(cherry picked from commit 0dc711732a)

* Role behavior tests (#1285)

* Added role tests.

* Added PauserRole tests to contracts that have that role.

* Added MinterRole tests to contracts that have that role.

* Fixed linter errors.

* Migrate Ownable to Roles (#1287)

* Added CapperRole.

* RefundEscrow is now Secondary.

* FinalizableCrowdsale is no longer Ownable.

* Removed Whitelist and WhitelistedCrowdsale, redesign needed.

* Fixed linter errors, disabled lbrace due to it being buggy.

* Remove RBAC, SignatureBouncer refactor (#1289)

* Added CapperRole.

* RefundEscrow is now Secondary.

* FinalizableCrowdsale is no longer Ownable.

* Removed Whitelist and WhitelistedCrowdsale, redesign needed.

* Fixed linter errors, disabled lbrace due to it being buggy.

* Moved SignatureBouncer tests.

* Deleted RBAC and Superuser.

* Deleted rbac directory.

* Updated readme.

* SignatureBouncer now uses SignerRole, renamed bouncer to signer.

* feat: implement ERC721Mintable and ERC721Burnable (#1276)

* feat: implement ERC721Mintable and ERC721Burnable

* fix: linting errors

* fix: remove unused mintable mock for ERC721BasicMock

* fix: add finishMinting tests

* fix: catch MintFinished typo

* inline ERC721Full behavior

* undo pretty formatting

* fix lint errors

* rename canMint to onlyBeforeMintingFinished for consistency with ERC20Mintable

* Fix the merge with the privatization branch

* fix lint

* Remove underscore

* Delete CapperRole.test.js

* fix increaseApproval
2018-09-07 11:38:21 -03:00
254210f699 Improve role behavior tests (#1300)
* The public role behavior now also tests the modifer.

* Fixed linter error.
2018-09-07 11:11:27 -03:00
951460696e Added events to the role contracts. (#1302)
* Added events to the role contracts.

* Fixed linter error.
2018-09-07 10:04:52 -03:00
84e63bbf8b Fix decrease allowance and add non-zero address precondition to approve (#1293)
* rename {increase,decrease}Approval to {increase,decrease}Allowance

* add non-zero spender check to approve and {increase,decrease}Allowance

* Updated tests to reflect the new behavior.

* fix wrong test description

* fix old function names

* Fixed linter error.

* Fixed typo.
2018-09-07 10:01:31 -03:00
e7e8d8eac1 Fixed Solium warnings. (#1301) 2018-09-07 10:00:37 -03:00
f28a135429 remove unnecessary internal constant (#1297) 2018-09-07 07:23:12 -03:00
f12817e446 RBAC and Ownable migration towards Roles (#1291)
* Role tests (#1228)

* Moved RBAC tests to access.

* Added Roles.addMany and tests.

* Fixed linter error.

* Now using uint256 indexes.

* Removed RBAC tokens (#1229)

* Deleted RBACCappedTokenMock.

* Removed RBACMintableToken.

* Removed RBACMintableToken from the MintedCrowdsale tests.

* Roles can now be transfered. (#1235)

* Roles can now be transfered.

* Now explicitly checking support for the null address.

* Now rejecting transfer to a role-haver.

* Added renounce, roles can no longer be transfered to 0.

* Fixed linter errors.

* Fixed a Roles test.

* True Ownership (#1247)

* Added barebones Secondary.

* Added transferPrimary

* Escrow is now Secondary instead of Ownable.

* Now reverting on transfers to 0.

* The Secondary's primary is now private.

* MintableToken using Roles (#1236)

* Minor test style improvements (#1219)

* Changed .eq to .equal

* Changed equal(bool) to .to.be.bool

* Changed be.bool to equal(bool), disallowed unused expressions.

* Add ERC165Query library (#1086)

* Add ERC165Query library

* Address PR Comments

* Add tests and mocks from #1024 and refactor code slightly

* Fix javascript and solidity linting errors

* Split supportsInterface into three methods as discussed in #1086

* Change InterfaceId_ERC165 comment to match style in the rest of the repo

* Fix max-len lint issue on ERC165Checker.sol

* Conditionally ignore the asserts during solidity-coverage test

* Switch to abi.encodeWithSelector and add test for account addresses

* Switch to supportsInterfaces API as suggested by @frangio

* Adding ERC165InterfacesSupported.sol

* Fix style issues

* Add test for supportsInterfaces returning false

* Add ERC165Checker.sol newline

* feat: fix coverage implementation

* fix: solidity linting error

* fix: revert to using boolean tests instead of require statements

* fix: make supportsERC165Interface private again

* rename SupportsInterfaceWithLookupMock to avoid name clashing

* Added mint and burn tests for zero amounts. (#1230)

* Changed .eq to .equal. (#1231)

* ERC721 pausable token (#1154)

* ERC721 pausable token

* Reuse of ERC721 Basic behavior for Pausable, split view checks in paused state & style fixes

* [~] paused token behavior

* Add some detail to releasing steps (#1190)

* add note about pulling upstream changes to release branch

* add comment about upstream changes in merging section

* Increase test coverage (#1237)

* Fixed a SplitPayment test

* Deleted unnecessary function.

* Improved PostDeliveryCrowdsale tests.

* Improved RefundableCrowdsale tests.

* Improved MintedCrowdsale tests.

* Improved IncreasingPriceCrowdsale tests.

* Fixed a CappedCrowdsale test.

* Improved TimedCrowdsale tests.

* Improved descriptions of added tests.

*  ci: trigger docs update on tag  (#1186)

* MintableToken now uses Roles.

* Fixed FinalizableCrowdsale test.

* Roles can now be transfered.

* Fixed tests related to MintableToken.

* Removed Roles.check.

* Renamed transferMintPermission.

* Moved MinterRole

* Fixed RBAC.

* Adressed review comments.

* Addressed review comments

* Fixed linter errors.

* Added Events tests of Pausable contract (#1207)

* Fixed roles tests.

* Rename events to past-tense (#1181)

* fix: refactor sign.js and related tests (#1243)

* fix: refactor sign.js and related tests

* fix: remove unused dep

* fix: update package.json correctly

* Added "_" sufix to internal variables (#1171)

* Added PublicRole test.

* Fixed crowdsale tests.

* Rename ERC interfaces to I prefix (#1252)

* rename ERC20 to IERC20

* move ERC20.sol to IERC20.sol

* rename StandardToken to ERC20

* rename StandardTokenMock to ERC20Mock

* move StandardToken.sol to ERC20.sol, likewise test and mock files

* rename MintableToken to ERC20Mintable

* move MintableToken.sol to ERC20Mintable.sol, likewise test and mock files

* rename BurnableToken to ERC20Burnable

* move BurnableToken.sol to ERC20Burnable.sol, likewise for related files

* rename CappedToken to ERC20Capped

* move CappedToken.sol to ERC20Capped.sol, likewise for related files

* rename PausableToken to ERC20Pausable

* move PausableToken.sol to ERC20Pausable.sol, likewise for related files

* rename DetailedERC20 to ERC20Detailed

* move DetailedERC20.sol to ERC20Detailed.sol, likewise for related files

* rename ERC721 to IERC721, and likewise for other related interfaces

* move ERC721.sol to IERC721.sol, likewise for other 721 interfaces

* rename ERC721Token to ERC721

* move ERC721Token.sol to ERC721.sol, likewise for related files

* rename ERC721BasicToken to ERC721Basic

* move ERC721BasicToken.sol to ERC721Basic.sol, likewise for related files

* rename ERC721PausableToken to ERC721Pausable

* move ERC721PausableToken.sol to ERC721Pausable.sol

* rename ERC165 to IERC165

* move ERC165.sol to IERC165.sol

* amend comment that ERC20 is based on FirstBlood

* fix comments mentioning IERC721Receiver

* added explicit visibility (#1261)

* Remove underscores from event parameters. (#1258)

* Remove underscores from event parameters.

Fixes #1175

* Add comment about ERC

* Move contracts to subdirectories (#1253)

* Move contracts to subdirectories

Fixes #1177.

This Change also removes the LimitBalance contract.

* fix import

* move MerkleProof to cryptography

* Fix import

* Remove HasNoEther, HasNoTokens, HasNoContracts, and NoOwner (#1254)

* remove HasNoEther, HasNoTokens, HasNoContracts, and NoOwner

* remove unused ERC223TokenMock

* remove Contactable

* remove TokenDestructible

* remove DeprecatedERC721

* inline Destructible#destroy in Bounty

* remove Destructible

* Functions in interfaces changed to "external" (#1263)

* Add a leading underscore to internal and private functions. (#1257)

* Add a leading underscore to internal and private functions.

Fixes #1176

* Remove super

* update the ERC721 changes

* add missing underscore after merge

* Fix mock

* Improve encapsulation on SignatureBouncer, Whitelist and RBAC example (#1265)

* Improve encapsulation on Whitelist

* remove only

* update whitelisted crowdsale test

* Improve encapsulation on SignatureBouncer

* fix missing test

* Improve encapsulation on RBAC example

* Improve encapsulation on RBAC example

* Remove extra visibility

* Improve encapsulation on ERC20 Mintable

* Improve encapsulation on Superuser

* fix lint

* add missing constant

* Addressed review comments.

* Fixed build error.

* Improved Roles API. (#1280)

* Improved Roles API.

* fix linter error

* Added PauserRole. (#1283)

* Remove Claimable, DelayedClaimable, Heritable (#1274)

* remove Claimable, DelayedClaimable, Heritable

* remove SimpleSavingsWallet example which used Heritable

(cherry picked from commit 0dc711732a)

* Role behavior tests (#1285)

* Added role tests.

* Added PauserRole tests to contracts that have that role.

* Added MinterRole tests to contracts that have that role.

* Fixed linter errors.

* Migrate Ownable to Roles (#1287)

* Added CapperRole.

* RefundEscrow is now Secondary.

* FinalizableCrowdsale is no longer Ownable.

* Removed Whitelist and WhitelistedCrowdsale, redesign needed.

* Fixed linter errors, disabled lbrace due to it being buggy.

* Remove RBAC, SignatureBouncer refactor (#1289)

* Added CapperRole.

* RefundEscrow is now Secondary.

* FinalizableCrowdsale is no longer Ownable.

* Removed Whitelist and WhitelistedCrowdsale, redesign needed.

* Fixed linter errors, disabled lbrace due to it being buggy.

* Moved SignatureBouncer tests.

* Deleted RBAC and Superuser.

* Deleted rbac directory.

* Updated readme.

* SignatureBouncer now uses SignerRole, renamed bouncer to signer.

* feat: implement ERC721Mintable and ERC721Burnable (#1276)

* feat: implement ERC721Mintable and ERC721Burnable

* fix: linting errors

* fix: remove unused mintable mock for ERC721BasicMock

* fix: add finishMinting tests

* fix: catch MintFinished typo

* inline ERC721Full behavior

* undo pretty formatting

* fix lint errors

* rename canMint to onlyBeforeMintingFinished for consistency with ERC20Mintable

* Fix the merge with the privatization branch

* remove duplicate CapperRole test
2018-09-07 07:16:51 -03:00
bf95602404 Simplify IndividuallyCappedCrowdsale interface (#1296)
* remove concept of User and remove setGroupCap

* fix linting error

* remove mention of users from comments
2018-09-07 00:40:12 -03:00
897ef29394 Bumped required solidity version to 0.4.24. (#1295) 2018-09-06 22:20:49 -03:00
df1fab540e rename MerkleProof.verifyProof to MerkleProof.verify (#1294) 2018-09-06 21:48:04 -03:00
a7ee54e199 getApproved require the given token ID exist (#1256)
* getApproved require the given token ID exist

* missing commit from merge

* clarify the test descriptions
2018-09-06 19:43:48 -03:00
661e5d86dc Rename SupportsInterfaceWithLookup to ERC165 (#1288)
* rename SupportsInterfaceWithLookup to ERC165

* rename SupportsInterfaceWithLookup files to ERC165
2018-09-06 19:37:14 -03:00
ab13379653 Improve encapsulation on TimedCrowdsale (#1281)
* Improve encapsulation on ERC165

* Improve encapsulation on ERC20

* Improve encapsulation on ERC721

* Add tests, use standard getters

* fix tests

* Fix lint

* move interface ids to implementation contracts

* Do not prefix getters

* Improve encapsulation on Crowdsales

* add missing tests

* remove only

* Improve encapsulation on Pausable

* add the underscore

* Improve encapsulation on ownership

* fix rebase

* fix ownership

* Improve encapsulation on payments

* Add missing tests

* add missing test

* Do not prefix getters

* Do not prefix getters

* Fix tests.

* Update modifiers to call public view functions.

Fixes #1179.

* remove isMinter

* fix is owner call

* fix isOpen

* Fix merge

* Improve encapsulation on TimedCrowdsale

* Add missing parentheses

* remove duplicate function definition
2018-09-06 15:06:28 -03:00
616124e37c Update modifiers to call public view functions (#1277)
* Update modifiers to call public view functions.

Fixes #1179.

* remove isMinter

* fix is owner call

* fix isOpen

* Remove unnecessary solium disable
2018-09-06 11:38:29 -03:00
b8a70f0e55 Improve encapsulation on Crowdsales (#1268)
* Improve encapsulation on Crowdsales

* add missing tests

* remove only

* Do not prefix getters
2018-09-05 18:34:21 -03:00
7bb87237f3 Improve encapsulation on ERCs (#1270)
* Improve encapsulation on ERC165

* Improve encapsulation on ERC20

* Improve encapsulation on ERC721

* Add tests, use standard getters

* fix tests

* Fix lint

* move interface ids to implementation contracts

* Do not prefix getters
2018-09-05 17:37:29 -03:00
45c0c072d1 Improve encapsulation on lifecycle, ownership and payments (#1269)
* Improve encapsulation on Pausable

* add the underscore

* Improve encapsulation on ownership

* fix rebase

* fix ownership

* Improve encapsulation on payments

* Add missing tests

* add missing test

* Do not prefix getters

* Fix tests.

* revert pending owner reset

* add missing underscore

* Add missing underscore
2018-09-05 16:11:29 -03:00
d6c7700f4c Rename the proposals tests to drafts (#1279) 2018-09-05 16:01:52 -03:00
4eb4d7114d Allow non-beneficiaries to trigger release of their funds (#1275)
* add address argument to PullPayments#withdrawPayments

* add argument to SplitPayment#claim

* add address argument to PostDeliveryCrowdsale#withdrawTokens

* add address argument to RefundableCrowdsale#claimRefund

* rename SplitPayment#claim to SplitPayment#release
2018-09-05 12:01:27 -03:00
2aa5dd26be Improve encapsulation on BreakInvariantBounty (#1267)
* Improve encapsulation on BreakInvariantBounty

* Make researchers private

* Do not prefix getters
2018-09-05 11:24:26 -03:00
0dc711732a Remove Claimable, DelayedClaimable, Heritable (#1274)
* remove Claimable, DelayedClaimable, Heritable

* remove SimpleSavingsWallet example which used Heritable
2018-09-05 11:17:18 -03:00
00abd3aadc Rename proposals directory to drafts and move some contracts there (#1271)
* rename proposals directory to drafts directory

* move TokenVesting and SignatureBouncer to drafts/

* rename BouncerMock.sol to SignatureBouncerMock.sol
2018-09-04 20:37:07 -06:00
f4eb51a7e9 Improve encapsulation on SignatureBouncer, Whitelist and RBAC example (#1265)
* Improve encapsulation on Whitelist

* remove only

* update whitelisted crowdsale test

* Improve encapsulation on SignatureBouncer

* fix missing test

* Improve encapsulation on RBAC example

* Improve encapsulation on RBAC example

* Remove extra visibility

* Improve encapsulation on ERC20 Mintable

* Improve encapsulation on Superuser

* fix lint

* add missing constant
2018-09-03 19:06:43 -03:00
b0f20d43df Add a leading underscore to internal and private functions. (#1257)
* Add a leading underscore to internal and private functions.

Fixes #1176

* Remove super

* update the ERC721 changes

* add missing underscore after merge

* Fix mock
2018-09-03 18:08:25 -03:00
fbfd1fed45 Functions in interfaces changed to "external" (#1263) 2018-09-03 17:28:38 -03:00
bd994a88de Remove HasNoEther, HasNoTokens, HasNoContracts, and NoOwner (#1254)
* remove HasNoEther, HasNoTokens, HasNoContracts, and NoOwner

* remove unused ERC223TokenMock

* remove Contactable

* remove TokenDestructible

* remove DeprecatedERC721

* inline Destructible#destroy in Bounty

* remove Destructible
2018-09-03 17:27:16 -03:00
2441fd7d17 Move contracts to subdirectories (#1253)
* Move contracts to subdirectories

Fixes #1177.

This Change also removes the LimitBalance contract.

* fix import

* move MerkleProof to cryptography

* Fix import
2018-09-03 10:53:28 -03:00
964bc4044a Remove underscores from event parameters. (#1258)
* Remove underscores from event parameters.

Fixes #1175

* Add comment about ERC
2018-09-03 10:47:22 -03:00
4385fd5a23 added explicit visibility (#1261) 2018-08-31 19:13:39 -06:00
2e0713becb Rename ERC interfaces to I prefix (#1252)
* rename ERC20 to IERC20

* move ERC20.sol to IERC20.sol

* rename StandardToken to ERC20

* rename StandardTokenMock to ERC20Mock

* move StandardToken.sol to ERC20.sol, likewise test and mock files

* rename MintableToken to ERC20Mintable

* move MintableToken.sol to ERC20Mintable.sol, likewise test and mock files

* rename BurnableToken to ERC20Burnable

* move BurnableToken.sol to ERC20Burnable.sol, likewise for related files

* rename CappedToken to ERC20Capped

* move CappedToken.sol to ERC20Capped.sol, likewise for related files

* rename PausableToken to ERC20Pausable

* move PausableToken.sol to ERC20Pausable.sol, likewise for related files

* rename DetailedERC20 to ERC20Detailed

* move DetailedERC20.sol to ERC20Detailed.sol, likewise for related files

* rename ERC721 to IERC721, and likewise for other related interfaces

* move ERC721.sol to IERC721.sol, likewise for other 721 interfaces

* rename ERC721Token to ERC721

* move ERC721Token.sol to ERC721.sol, likewise for related files

* rename ERC721BasicToken to ERC721Basic

* move ERC721BasicToken.sol to ERC721Basic.sol, likewise for related files

* rename ERC721PausableToken to ERC721Pausable

* move ERC721PausableToken.sol to ERC721Pausable.sol

* rename ERC165 to IERC165

* move ERC165.sol to IERC165.sol

* amend comment that ERC20 is based on FirstBlood

* fix comments mentioning IERC721Receiver
2018-08-31 16:13:07 -03:00
b6943263d2 Added "_" sufix to internal variables (#1171) 2018-08-29 08:59:18 -06:00
1c57637fd5 fix: refactor sign.js and related tests (#1243)
* fix: refactor sign.js and related tests

* fix: remove unused dep

* fix: update package.json correctly
2018-08-29 06:35:44 -03:00
1c0532455a Rename events to past-tense (#1181) 2018-08-28 20:14:06 -06:00
132994d286 Added Events tests of Pausable contract (#1207) 2018-08-28 13:58:44 -06:00
524a27674c ci: trigger docs update on tag (#1186) 2018-08-28 10:37:11 -06:00
a9f910d34f Increase test coverage (#1237)
* Fixed a SplitPayment test

* Deleted unnecessary function.

* Improved PostDeliveryCrowdsale tests.

* Improved RefundableCrowdsale tests.

* Improved MintedCrowdsale tests.

* Improved IncreasingPriceCrowdsale tests.

* Fixed a CappedCrowdsale test.

* Improved TimedCrowdsale tests.

* Improved descriptions of added tests.
2018-08-24 19:23:11 -03:00
a466e76d26 Add some detail to releasing steps (#1190)
* add note about pulling upstream changes to release branch

* add comment about upstream changes in merging section
2018-08-24 09:17:52 -03:00
9e6307f34b ERC721 pausable token (#1154)
* ERC721 pausable token

* Reuse of ERC721 Basic behavior for Pausable, split view checks in paused state & style fixes

* [~] paused token behavior
2018-08-24 07:02:54 -03:00
48fe7b8cbf Changed .eq to .equal. (#1231) 2018-08-23 13:47:47 -07:00
d58fac8281 Added mint and burn tests for zero amounts. (#1230) 2018-08-23 06:07:34 -03:00
2adb491637 Add ERC165Query library (#1086)
* Add ERC165Query library

* Address PR Comments

* Add tests and mocks from #1024 and refactor code slightly

* Fix javascript and solidity linting errors

* Split supportsInterface into three methods as discussed in #1086

* Change InterfaceId_ERC165 comment to match style in the rest of the repo

* Fix max-len lint issue on ERC165Checker.sol

* Conditionally ignore the asserts during solidity-coverage test

* Switch to abi.encodeWithSelector and add test for account addresses

* Switch to supportsInterfaces API as suggested by @frangio

* Adding ERC165InterfacesSupported.sol

* Fix style issues

* Add test for supportsInterfaces returning false

* Add ERC165Checker.sol newline

* feat: fix coverage implementation

* fix: solidity linting error

* fix: revert to using boolean tests instead of require statements

* fix: make supportsERC165Interface private again

* rename SupportsInterfaceWithLookupMock to avoid name clashing
2018-08-22 12:07:53 -07:00
4fb9bb7020 Minor test style improvements (#1219)
* Changed .eq to .equal

* Changed equal(bool) to .to.be.bool

* Changed be.bool to equal(bool), disallowed unused expressions.
2018-08-22 16:05:18 -03:00
64c324e37c remove arrow functions from js tests (#1225) 2018-08-21 16:30:14 -03:00
7618b91d9c Fix balance and allowance checks in _burn and _burnFrom (#1218)
* fix off by one error in _burn and _burnFrom

* add tests for off-by-one error

* change amount used
2018-08-17 19:18:05 -03:00
20cf885430 No longer assigning awaits to temporary variables. (#1216) 2018-08-17 16:10:40 -03:00
df9426f989 tests: use stages for the travis execution (#967)
* tests: use stages for the travis execution

Fixes #694

* add comments as suggested by @nventuro

* move the unit tests first, as suggested by @frangio

* make stages clearer as suggested by @nventuro

* tests: use stages for the travis execution

Fixes #694

* add comments as suggested by @nventuro

* move the unit tests first, as suggested by @frangio

* make stages clearer as suggested by @nventuro

* update the stage names as suggested by @frangio

* Run all tests in parallel

* added names
2018-08-17 12:09:43 -03:00
b59b43fa44 Enforce linebreak style (#1213)
* Now forcing Unix linebreak style.

* Added linebreak style for Solidity files.
2018-08-16 14:31:09 -03:00
4dcdd293e8 StandardToken encapsulation (#1197)
* make StandardToken state variables private

* simplify mocks

* document new internal functions

* fix link to ERC20 document

* revert order of Transfer and Mint events

* Revert "simplify mocks"

This reverts commit 371fe3e567.

* add tests for new internal functions

* add check for null account

* add checks for balances and allowance

* add inline docs to BurnableToken._burn

* remove redundant checks and clarify why
2018-08-16 13:03:40 -03:00
8d11dcc0e5 Increase testing coverage (#1195)
* Added non-target bounty test

* Increased ERC721 testing coverage.

* Addressed review comments.

* fix linter error

* Fixed linter error

* Removed unnecessary bouncer require

* Improved Crowdsale tests.

* Added missing SuperUser test.

* Improved payment tests.

* Improved token tests.

* Fixed ERC721 test.

* Reviewed phrasing.
2018-08-14 19:37:30 -03:00
d51e38758e Math.average (#1170)
* Added Math.average

* Removed assertion.
2018-08-13 20:07:18 -03:00
e493d2a6ba Merge branch 'release-v1.12.0' 2018-08-13 17:43:53 -03:00
9aa30e1960 Add Modulo operation for getting the quotient (#915)
* Add Modulo operation for getting the quotient

* Improved modulo tests and implementation.

* Removed assertion.
2018-08-13 17:40:48 -03:00
41e6b2e992 Make ERC721.exists internal (#1193)
* Made ERC721.exists internal.

* Removed exists ERC165 identifiers
2018-08-13 16:07:27 -03:00
f00fce53d7 switch to container-based travis run (#1199) 2018-08-13 08:34:36 -03:00
b52912c702 change dos file format to unix (#1198)
used dos2unix program
2018-08-13 06:39:00 -03:00
66c1968913 Changed SplitPayment require to assert. (#1188) 2018-08-12 15:34:37 -03:00
0e65947efb Release v1.12.0 2018-08-10 19:09:13 -03:00
ac91af9a6a Replace all asserts with chai.should (#1183)
* Moving towards chai.should.

* Fixed failing tests.

* Fixed linter errors.

* Revert package-lock.json changes.

* Fixed failing tests.

* s/eq/equal

* Addressed review comment
2018-08-10 19:03:04 -03:00
a2e7103869 Improved SafeMath inline comments. 2018-08-10 17:34:34 -03:00
c9e91586e7 feat: use require in SafeMath (#1187)
* feat: use require in SafeMath

* fix: grammar with revert
2018-08-10 15:41:06 -03:00
6dab31288e change author to OpenZeppelin Community (#1173) 2018-08-08 18:11:22 -03:00
31fc572abe inLogs no longer returns a promise. (#1169) 2018-08-08 10:57:00 -07:00
4066b5e683 Made the visibility-first and max-len rules mandatory. (#1139) 2018-08-08 14:22:45 -03:00
e819416d04 SafeMath is now more consistent with itself. (#1168) 2018-08-08 11:21:23 -03:00
eca5bf9157 Deploy the contract with the designated owner (#1161)
* Deploy the contract with the designated owner

* Fixed TX origin.
2018-08-08 07:04:14 -03:00
a3e02be459 Initialize MAX_UINT more neatly (#1166)
Use 2 ^ 256 - 1 instead that huge constant value.
2018-08-08 06:58:04 -03:00
d124f18dde add note about next tag in releasing document (#1153) 2018-08-07 16:33:50 -03:00
17309e5924 Change uint to uint256 (#1160)
This is a minor change, aligning to the same convention used in the other contracts.
2018-08-07 15:05:56 -03:00
94797978bb SplitPayment now requires payees. (#1131)
* SplitPayment now requires payees.

* Improved test phrasing.
2018-08-06 16:21:34 -03:00
31ac59b224 reentrancy mutex gas optimization (#1155)
* reentrancy mutex gas optimization

* 1) uint => uint256 2) ++ to += 1
2018-08-06 15:22:08 -03:00
bf34911857 Remove Math.min64 and Math.max64 (#1156)
* remove Math.min64 and Math.max64

* refactor Math tests to use return values

* enhance Math coverage
2018-08-06 15:18:19 -03:00
59cb2e2d0f release candidate v1.12.0-rc.2 2018-08-03 15:47:22 -03:00
ba85aef95e Renamed behaviour to behavior. (#1151) 2018-08-03 14:41:54 -03:00
448a7b3048 Fixed HasNoTokens test. (#1149) 2018-08-03 00:12:54 -03:00
ef347ffccc Consolidated ERC20 Interface and Implementation Files (#1125)
* Consolidted ERC20 Interface and Implementation Files

* Fixed CanReclaimToken's tests to use StandardTokenMock instead of BasicTokenMock

* Changed token's variable type in TokenTimelock to ERC20

* Merged the StandardBurnableToken with BurnableToken since it now inherits from StandardToken; Fixed TokenTimelock so it uses SafeERC20 for ERC20

* Fixed variable type for _token in TokenTimelock constructor

* Fixed linting warning in BurnableToken

* Added back burnFrom tests.
2018-08-02 23:12:31 -03:00
418a6b5791 Crowdsale inheritance order (#1128)
* Changed Crowdsale inheritance order.

* Changed FinalizableCrowdsale inheritance order.

(cherry picked from commit 3d86c58d2c)
2018-08-02 18:37:39 -03:00
3d86c58d2c Crowdsale inheritance order (#1128)
* Changed Crowdsale inheritance order.

* Changed FinalizableCrowdsale inheritance order.
2018-08-02 17:57:17 -03:00
e77d70f8c1 Remove .babelrc 2018-08-02 17:46:20 -03:00
4544df47da All tests now use account names, and dont use accounts[0] (except ERC… (#1137)
* All tests now use account names, and dont use accounts[0] (except ERC721)

* Added account names to some missing contracts.
2018-08-02 16:55:31 -03:00
f49721576f Remove abbreviations from parameters (#1142)
* Add an initial document for our code style

* Remove abbreviations from parameters

* Rename the param in AddressUtils

* fix comment
2018-08-02 16:38:54 -03:00
7fdca7b025 updated the typo in Readme (#1143) 2018-08-02 12:49:58 -03:00
1dcefa6bd3 Add an initial document for our release process (#1140)
* Add an initial document for our release process

* add more detail and explanation to releasing guide

* fix details of the RELEASING.md document

* Update RELEASING.md

* Update RELEASING.md

* Update RELEASING.md

* Update RELEASING.md
2018-08-01 19:16:56 -03:00
89ccb03e6e Add an initial document for our code style (#1141)
* Add an initial document for our code style

* add parameter types
2018-08-01 17:13:41 -03:00
5ae8aa4e2e Updated package-lock.json 2018-08-01 15:07:09 -03:00
3806d6128e release candidate v1.12.0-rc.1 2018-08-01 15:00:38 -03:00
052fd3425d Made the visibility-first rule mandatory. 2018-08-01 13:13:08 -03:00
4d799f3cbe Sorted .soliumrc.json rules. 2018-08-01 13:09:40 -03:00
07a27f0e5e Disabled Solium's error-reason rule. (#1138) 2018-08-01 12:56:28 -03:00
ca9e317259 Update Truffle and Solium (#1105)
* fixed visibility warnings

* solved visibility and line length warning

* change a test assertion that fails due to chai dependence update

* linter, constructor style and solved visibility warnings

* Changed Windows line endings to Unix.
2018-08-01 10:11:37 -03:00
9638ecd87a Typo fix. 2018-08-01 08:31:05 -03:00
56735a706c Use address(this) instead of this (#1134)
* Use address(this) instead of this

It's preferred to use `address(this)` vs `this`

* Change to address(this) vs this
2018-07-31 13:36:38 -03:00
2765350248 Prefix all parameters with underscore (#1133) 2018-07-31 13:06:53 -03:00
1200969eb6 Refactor/reentrancy guard gas optimization #1056 (#1057)
* optimizing ReentrancyGuard gas usage

* style fixed
2018-07-27 22:36:17 -03:00
90b98a7bef Add pure to tokenFallback function (#1122)
Silences warning
2018-07-27 22:25:39 -03:00
16429b1522 Making visibility explicit for storage variables (#759)
* Making visibility explicit for storage variables

* Made BasicToken's variables internal.
2018-07-27 17:50:33 -03:00
ae2980b072 Add EditorConfig (#1119)
* Add EditorConfig file.

This allows users with a wide variety of editors to easily code in
OpenZeppelin's preferred 2 space indentation code style.

See https://editorconfig.org for more information.

* Eslint: Always disallow trailing space

* Eslint: Error on missing EOL at file end
2018-07-27 14:55:24 -03:00
f5b0bb3246 Added more comprehensive usage information to the Getting Started guide: (#1089)
* Added an Architecture section that speaks to the different types of contracts
* Added a Tests section that provides high-level visibility into what is used for unit testing
* Added a How To Use and Modify OpenZeppelin Contracts section
* Added development principles to the existing Security section
2018-07-27 13:33:13 -03:00
4c6575bf2f fix: solium linting errors (#1113)
* fix: solium linting errors, fixes #1092

* fix: remove uppercase requirement
2018-07-26 23:53:24 -03:00
2f6c8b05f6 Test/assertRevert: Fix late return bug (#1123)
We now ensure that if an exception is thrown while awaiting the promise,
the exception _has_ to be a revert. We throw 'Expected revert not
received' only afterwards. This solves any problems with confusing the
word 'revert'.

Fix #775
2018-07-26 23:53:06 -03:00
567b773242 Prefer const in test files (#1117)
* Removed all instances of var.

* Sorted eslintrc rules.

* Made eslint rule severity explicit.

* Now prefering const over let.
2018-07-26 13:25:10 -03:00
6e19ed47be fix: bounty tests, superceeds #799 (#1112)
* fix: bounty tests, superceeds #799

* fix: updates from PR notes
2018-07-26 12:17:16 -03:00
e6c15b34da Remove chai-as-promised (#1116)
* Test: Remove chai-as-promised calls

* Test/Helpers: expectThrow accepts optional message

* NPM: Remove chai-as-promised

* Contracts/DestructibleMock: Fix lint
2018-07-26 11:53:33 -03:00
afe9113b18 fix: move RBAC to //access (#1114) 2018-07-25 12:03:25 -03:00
73be06412f Remove payable from Destructible constructor (#1107)
* Destructible no longer has a payable constructor.

* Fixed linter errors.
2018-07-23 15:44:14 -03:00
23074676c4 Improved documentation for _preValidatePurchase method in Crowdsale (#1101)
* Improved documentation for _preValidatePurchase in Crowdsale

* Added newline at EOF
2018-07-22 14:41:34 -03:00
3c69cf658c Removed JSHint (unused). (#1088) 2018-07-20 17:05:11 -03:00
6bd8842ab5 removed and tested unecessary gas cost (#1017)
* removed and tested unecessary gas cost

* linted

* Revert package-lock.json update.

This reverts commit 054598ce7f.

* Added clarifying comments.
2018-07-20 16:57:39 -03:00
d20d03c149 Remove redundant modifiers from safeTransferFrom (#1029) (#1030) 2018-07-20 16:18:24 -03:00
ebd4b5e73d decrease approval condition fix (greater than and equal to) (#1063)
* decrease approval condition fix (greater than and equal to)

* sol lint fixed

* Improved standard token decreaseApprovalTests.
2018-07-20 14:52:22 -03:00
1ecda54449 Input check sequence modification for gas efficiency (#1043)
* Update StandardToken.sol

* Slight improvement in gas efficiency

Users tend to attempt to over-spend more than they attempt to burn non-burnable tokens. If the contract checks for overspending before assuring tokens are not being burnt a slight amount of gas might be saved in the long term.
2018-07-20 14:52:02 -03:00
67b67b791e Changed before for beforeAll, refactored Bouncer tests. (#1094)
* Changed before for beforeAll, refactored Bouncer tests.

* Fixed linter errors.

* fix: updates for SignatureBouncer tests and voucher construction
2018-07-20 12:25:40 -03:00
ce0c3274ee made remaining public fallback functions external (#1080) 2018-07-20 12:25:25 -03:00
90b3050ad7 minor RBAC.sol documentation fix (#1060) 2018-07-20 12:09:47 -03:00
c95ea5125d Fix MerkleProof natspec comments (#1083) 2018-07-19 22:32:34 -03:00
11266b0d56 Fix ReentrancyGuard comments (#1084) 2018-07-19 22:10:15 -03:00
45d6943913 Fix typos (#1082) 2018-07-19 21:48:20 -03:00
5f6d511af9 Fix typo in Crowdsale.sol (#1035) 2018-07-19 21:47:53 -03:00
7dbb7a8b8e Merge branch 'release-v1.11.0' 2018-07-19 18:01:53 -03:00
3318b91697 feat: add AutoIncrementing contract (#1023)
* feat: add AutoIncrementing contract

* feat: allow multiple counters per instance

* fix: some linting errors

* feat: use recommended implementaiton

* fix: remove .only in tests

* fix: PR notes

* fix: add note about incrementing counter
2018-07-18 16:38:07 -07:00
cea2a85a42 Remove Babel (#1074)
* Test helpers no longer rely on Babel.

* Behaviours are no longer imported.

* Removed Babel dependency.

* Fixed linter errors.
2018-07-18 19:37:16 -03:00
99e4b081dc ECRecover test should revert because of wrong calldata size (#1050)
* Assume that token is mintable.

* ECRecover test should revert because of wrong calldata size

* fix: use expectThrow

* fix: ignore failing test until solc^0.5.0
2018-07-16 18:38:57 -04:00
b120b9aff7 moved ERC165 interface IDs from ERC721 implementation files to the interface file (#1070) 2018-07-15 11:05:45 -04:00
cc9fa57777 v1.11.0 2018-07-13 17:07:14 -03:00
40b5594f52 Promisify web3 sync requests in tests (#1009) 2018-07-10 14:01:51 -07:00
4575a240f7 Create CODE_OF_CONDUCT.md (#1061)
* Create CODE_OF_CONDUCT.md

* fix: update to raw text from website rather than github's provided one
2018-07-05 15:44:20 -03:00
eb4dfea6e9 v1.11.0-rc.1 2018-07-03 19:32:58 -03:00
8fd072cf8e Escrows (#1014)
* Added basic Escrow

* PullPayment now uses an Escrow, removing all trust from the contract

* Abstracted the Escrow tests to a behaviour

* Added ConditionalEscrow

* Added RefundableEscrow.

* RefundableCrowdsale now uses a RefundEscrow, removed RefundVault.

* Renaming after code review.

* Added log test helper.

* Now allowing empty deposits and withdrawals.

* Style fixes.

* Minor review comments.

* Add Deposited and Withdrawn events, removed Refunded

* The base Escrow is now Ownable, users of it (owners) must provide methods to access it.
2018-07-03 18:54:55 -03:00
c2ad8c3f57 Update the use of call() with selector only. (#1033) 2018-06-30 17:55:03 -03:00
fd253d6b8d Fix dependency warnings (#1053)
* update package-lock generated by npm

* run npm audit fix
2018-06-30 17:39:28 -03:00
7d8e3ca8b2 Align ERC721 Receiver with current ERC721 standard. (#1047)
* Align ERC721 Receiver with current ERC721 standard.
Adds a second address field to onERC721Received
onERC721Received(address,address,uint256,bytes)
Updates the function signature to 0x150b7a02 from 0xf0b9e5ba

* Add _operator to onERC721Received

* Fix error caused by formatOnSave

* Fixed comments on ERC721Receiver
Removed "Must use 50,000 gas or less"
Corrected the function signature
2018-06-28 20:11:18 -07:00
6b37ba36a1 Remove ERC827 token. (#1045)
Implementing this token is unsafe as per comments here:
https://github.com/ethereum/EIPs/issues/827#issuecomment-397857455
2018-06-28 13:32:07 -03:00
dc1e352cc4 Don't emit Approval event when approval is cleared on transfer (#1039) 2018-06-24 23:04:57 -07:00
f18c3bc438 feat: initial implementation of ERC1046 (#933)
* feat: initial implementation of ERC1046
2018-06-17 16:21:05 -07:00
0047e79681 ignore truffle generated file (#1019) 2018-06-16 19:30:48 -03:00
74a62a1314 using SafeERC20 to implement safeTransfer in Crowdsale (#1006)
* introduced safeTransfer to Crowdsale

* Removed .node-xmlhttprequest-sync-7601
2018-06-16 12:46:19 -03:00
92b695f2fb Fix/whitelisted crowdsale (#981)
* fix: swithc WhitelistedCrowdsale to use Whitelist.sol

* feat: refactor whitelist.sol, rbac.sol and whitelistedcrowdsale.sol

* feat: add event arg assets and update whitelist

* fix: update modifier comment and also test isWhitelisted

* fix: remove onlyWhitelisted backwards compat attempt, fix explicit inheritance

* fix: remove underscore prefix from event args

* fix: user access/Whitelist
2018-06-15 14:11:50 -07:00
Rob
ee78f67985 fixing comment - changing '_to' to '_spender' (#1007) 2018-06-15 12:08:28 -03:00
07020e9544 Remove redundant @dev tags (#995)
* Remove redundant @dev tags

* Remove redundant @notice tags
2018-06-14 15:19:59 -07:00
b4406d385f Use abi.encodeWithSignature together with raw call() (#1008) 2018-06-14 18:50:39 -03:00
78e39aa2ad Do not use implicit type conversion for address literals (#1002)
Uses the explicit address(0) for the zero address
2018-06-13 16:21:24 -07:00
e4ed8f0705 Added explicit integer sizes to uint variables in StandardToken (#1004) 2018-06-13 11:54:54 -07:00
5daaf60d11 Make contracts 4.24 compatible (#951)
* Make contracts 4.24 compatible
2018-06-13 11:34:32 -07:00
e1dc1411fc WIP: Fix/erc721 (#993)
* fix: defer lookup-specific info to implementations

* fix: change inheritance order, fix import
2018-06-12 18:46:32 -03:00
9f1d294ba4 Move Whitelist contract to access directory (#994) 2018-06-11 19:35:29 -03:00
9951acf6d8 Added aflesher as an author to SignatureBouncer.sol (#996) 2018-06-11 13:48:00 -07:00
72792a724d ownable: add a notice on renounceOwnership (#937)
* ownable: add a notice on renounceOwnership

* Apply the suggestion by @shrugs
2018-06-10 16:39:54 -03:00
b0292cf628 Add isValidSignatureAndData to Bouncer to verify method calls (#973) 2018-06-09 14:45:53 -07:00
39385f9f4e Addressed unchecked return value in AllowanceCrowdsale #945 using SafeERC20 (#946)
* addressed unchecked return value in AllowanceCrowdsale #945 using SafeERC20
2018-06-08 17:00:46 -07:00
7a61371b19 Updated documentation Uppercasing function name for ERC02 basic token (#720) 2018-06-08 16:30:48 -07:00
259b9da3e6 add 165 to 721 (#972)
* make _tokenId indexed in Transfer and Approval events

via: https://github.com/ethereum/EIPs/pull/1124/files

* fix: make name() and symbol() external instead of public

* feat: implement ERC721's ERC165

* feat: erc165 tests

* fix: don't use chai-as-promised in direct await

* fix: reorganize to /introspection

* feat: abstract all erc165 tests to a behavior

* feat: disallow registering 0xffffffff
2018-06-08 18:50:12 -03:00
5326e7c36e Removed redundant modifiers from CappedToken. (#969) 2018-06-06 11:29:54 -07:00
feb665136c 1.10.0 2018-06-05 17:40:24 -03:00
7fb84b42d5 Refactoring Superuser contract to allow Owners to transfer ownership … (#978)
* Refactoring Superuser contract to allow Owners to transfer ownership when they are not superusers #50

* Refactoring tests to create a contract instance for each of them #50
2018-06-05 17:28:42 -03:00
5db0d7d1a0 included command to add upstream (#959) 2018-06-04 18:31:32 -07:00
512e8218ca Add a comment on Detailed ERC20 token #953 (#960)
* add a comment on detailed erc20 token #953
2018-06-04 18:13:09 -07:00
9d6ffae8cb removed mentions of 'development' branch in Contribution Guidelines (#966) 2018-06-04 17:34:04 -07:00
2a997a8e92 Fixed wrong variable name in SampleCrowdsale.test.js. (#916) 2018-06-04 16:49:46 -07:00
5651538045 Clarified the rationaly behind the mul branch test. (#970) 2018-06-04 16:04:08 -07:00
10e84aecaf Fix Node 10 compatibility (#949)
*  update sha3 1.2.0 -> 1.2.2 for node 10 compatibility

* update nan 2.6.2 -> 2.10.0 for node 10 compatibility

* commit new package-lock.json format generated by npm 6
2018-06-04 17:26:23 -03:00
2637bd89be fix: add comment about rbacwithadmin being rather powerful (#936)
* fix: add comment about rbacwithadmin being rather powerful
* fix: move RBACWithAdmin to examples
2018-06-04 12:32:57 -07:00
32ec8b5398 Add Status Embark to README (#956)
* Update README.md

* update embark import to use the v1.9.0 tag instead of master

* Update README.md
2018-06-04 15:21:55 -03:00
a0c03ee61c Adding new Superuser contract with test (#952)
* Adding new Superuser contract + tests
2018-06-03 16:14:30 -07:00
e3f866c982 fix: remove daylimit.sol, closes #925 (#964) 2018-06-01 13:16:47 -07:00
5ab9024b6a update balance syntax for solidity 0.4.23 (#940) 2018-05-30 16:10:08 -07:00
d5f06ab32f addressed TokenVesting contstructor natspec updates in #742 (#935) 2018-05-29 10:45:40 -06:00
746673a94f style: use the max-len solidity rule (#944) 2018-05-14 11:42:32 -06:00
ba4cf03da7 contracts mocks: replace deprecated constant with view (#931) 2018-05-10 10:43:15 -06:00
39370ff690 Adding RBAC Mintable token (#923)
* added the RBACMintableToken
* added MintedCrowdsale with RBACMintableToken test
* added a mintable behaviour for tests
* moved minting tests in behaviour
* created a minted crowdsale behaviour to be tested with both mintable and rbacmintable token
2018-05-09 18:01:25 -07:00
ad12381549 update constructor syntax for solidity 0.4.23 in numerous contracts (#921)
* update solidity-coverage to ^0.5.0

* update truffle dependency to ^4.1.8

* update solium to ^1.1.7

* update all contracts to solidity ^0.4.23
2018-05-08 18:02:00 -07:00
20b85be6aa Ownable behavior (#929)
* added function to renounce ownership

* Provide an Ownable behavior for testing (#905)

* Fix indentation

* Convert to use should assertions
2018-05-08 17:33:37 -07:00
4223c9d50e feat: refactor whitelist.sol to use RBAC (#893)
* feat: refactor whitelist.sol to use RBAC

* fix: remove poor backwards compat attempt
2018-05-08 17:20:28 -07:00
f0eea31bdf Fix ERC721Token.sol code indent (#909) 2018-05-07 11:39:54 -07:00
ce0a928a6c Fix typos in ERC721BasicToken comments (#889) 2018-05-07 11:20:12 -07:00
85f079ee89 Removing more asserts in favor of require (#834)
* Removed asserts and replaced them in favor of require

* Adapted tests to work with requires
2018-05-03 14:04:02 -03:00
7e44204d9b added function to renounce ownership (#907) 2018-05-03 13:25:18 -03:00
4a10f727c4 1.9.0 2018-04-26 16:36:06 -03:00
e79dc645e4 Merge branch 'rename-openzeppelin-solidity' 2018-04-26 16:35:19 -03:00
0e5799c93b Clean up npm package (#904)
* ignore everything but official contracts for npm

* add tests to npm package

* remove truffle migrations stuff

* remove seemingly unused npm dependency

* clean up dependencies
2018-04-26 12:36:41 -03:00
90413e75f1 add version script to update ethpm.json (#906) 2018-04-25 20:32:09 -03:00
9c262571ae rename to openzeppelin-solidity 2018-04-25 19:19:15 -03:00
76fe1548ae Fix ERC721 test is not checking name and symbol properly #910 (#911) 2018-04-23 20:36:47 -03:00
8f2a4785cb Make ERC827 methods payable (#838)
* Make ERC827 methods payable

* Suppress linter errors

* Add some ERC827 payable tests

* Remove failOnBuy method from MessageHelper

* Fix linter warning

* Fix tests
2018-04-23 15:16:55 +02:00
16535fbb87 Update ERC827.sol to not use function overloading (#871)
* Update ERC827.sol to not use function overloading

* updated tests for erc827 function name changes

* fixed broken test

* removed findMethod from erc827 tests that is no longer necessary
2018-04-23 13:39:34 +02:00
77cc33fc5c cleaned up unsued variable definition (#753) 2018-04-20 16:01:05 -03:00
0b33d29e41 Add travis job to run test suite with solc nightly (#902)
Job is allowed to fail, and is run just for information purposes
2018-04-19 12:12:36 -03:00
61dfdde6c4 Updated send to sent. Matching indentation of closing comment. (#897) 2018-04-18 14:48:16 -03:00
e8be9a7bd0 Remove suggestion to rebase (#899) 2018-04-18 14:47:22 -03:00
dd8758fedf move misplaced MathMock (#900) 2018-04-18 14:47:00 -03:00
c63b203c1d Small SafeMath.sol gas improvements (add & mul). (#894) 2018-04-17 19:16:30 -03:00
c191757c6e rename truffle.js to truffle-config.js (#886) 2018-04-17 17:14:38 -03:00
f4bdaf49a1 Increase test coverage to 93% #549 (#768)
* Increase test coverage to 93% #549

* cover missing AllowanceCrowdsale branch

* improve Heritable coverage

* fix lint errors

* proper equal assert

* address review comments

* remove unneeded const definitions and imports

* use assertRevert

* reword scenario description

* Increase test coverage to 93% #549

* cover missing AllowanceCrowdsale branch

* improve Heritable coverage

* fix lint errors

* proper equal assert

* address review comments

* remove unneeded const definitions and imports

* use assertRevert

* reword scenario description

* move HIGH_GOAL constant to the scope where it's used

* remove const at top level

* address review comments
2018-04-17 15:05:34 -03:00
6a7114fdb4 Bouncer contract implementation (#883)
* feat: implement bouncer contracts

* fix: rename Bouncer to SignatureBouncer
2018-04-17 11:36:24 -03:00
0926729c8f Add StandardBurnableToken implementation (#870)
* Add StandardBurnableToken implementation

BurnableToken that extends from StandardToken and adds a
burnFrom method that decrements allowance. Equivalent to
a transferFrom plus burn in a single operation.

* Return event object from expectEvent helper

* Add comment on Approval event in burnFrom function

* Improvements on burnable token tests

- Inject initial balance as a parameter to the behaviour
- Use expectEvent helper for assertions on events
- Use chai bignumber for numbers
- Change to bdd-style assertions
2018-04-11 16:15:33 -03:00
9e1c934ffd Various fixes and formatting chores (#885)
* fix: clean up solium linting errors

* fix: make various contracts natspec compliant

* fix: this.balance deprecated; convert to address(this).balance

* fix: contract.call deprecated and switch to gasleft()

* fix: ignore empty block rule project-wide

* fix: add ignore cases for the rest of the linting warnings
2018-04-10 20:31:29 -03:00
a7e91856f3 Update to Truffle 4.1.5 and Ganache 6.1.0 (#876)
* Update to ganache-cli v6.1.0 and truffle v4.1.0

* Update to stable version of ganache-cli

* fix: update event emission warning

- Fix event emission warnings for solidity 4.21 after truffle has been
updated to use this version

* fix pr review comments

* update to truffle v4.1.5

* update package-lock

* add additional emit keywords

* update solidity-coverage to 0.4.15

* update to solium 1.1.6

* fix MerkleProof coverage analysis by testing through wrapper

* change version pragma to ^0.4.21

* fix solium linting errors
2018-04-09 20:48:32 -03:00
06666be93a change MerkleProof interface to take array of bytes32 (#879) 2018-04-08 12:36:16 -03:00
915f74c5f6 remove collaborators and audits from README (#866) 2018-04-04 21:17:27 -03:00
3d3f20f7e3 Removing obsolete comment - explicit check in place (#851) 2018-04-04 09:53:55 -03:00
03a3302abd add missing await in IndividuallyCappedCrowdsale (#867) 2018-04-03 18:50:24 -03:00
bd5f7f5774 Fix SafeMath test file (#865) 2018-04-03 17:54:48 -03:00
a6bef44790 fix: remove admin functionality from RBAC.sol fixes #802 (#836)
- splits the admin part of RBAC.sol into RBACWithAdmin.sol
2018-04-03 16:56:31 -03:00
a9c777faa6 docs: fix contributing link (#848)
* docs: fix contributing link
2018-04-03 15:56:01 -03:00
44a404aae5 Remove unnecessary import from ERC721Token.sol (#855)
The DeprecatedERC721.sol isn't implemented or necessary.
2018-04-03 11:32:52 -03:00
1d2d18f9da Small gas improvement in SafeMath.sol (#811) 2018-03-28 15:00:10 -03:00
82ce197e44 tests: fix most of the static warnings (#844) 2018-03-28 13:33:58 -03:00
42787e2a75 added awaits (#845) 2018-03-26 21:55:52 -03:00
9bc43c8d0f make ethjs-abi a devDependency (#843) 2018-03-26 16:24:12 -03:00
cacf03641c v1.8.0 2018-03-23 15:14:10 -03:00
e96164feea ERC721 full implementation (#803)
* Rename current ERC721 implementation to BaseERC721

* Implement ERC721 optional & approveAll functionality

* Support for new ERC721 interface

- Tests for new features are pending
- ERC721 is abstract, since it requires metadata implementation
- Move some methods into DeprecatedERC721 contract
- Reorganise base vs full implementation
- Pending tokenByIndex

* Add more tests for ERC721

* Implement suggestions by @dekz

* Update comments in ERC721 contracts

* Implement tokensByIndex extension

- Remove restrictions from mock mint and burn calls

* Add default implementation for metadata URI

This allows token implementation to be non-abstract

* Allow operators to call approve on a token

* Remove gas stipend restriction in call to 721 receiver

* Remove deprecated implementation

We only want to keep the interface, for interacting with already deployed contracts

* Add notice to isContract helper on constract constructors

* Change natspec delimiters for consistency

* Minor linting fixes

* Add constant modifier to ERC721_RECEIVED magic value

* Use 4-params safeTransferFrom for implementing the 3-params overload

* Minor text changes in natspec comments

* Use address(0) instead of 0 or 0x0

* Use if-statements instead of boolean one-liners for clarity

:-(

* Keep ownedTokensCount state var in sync in full ERC721 implementation

* Fix incorrect comparison when burning ERC721 tokens with metadata

* Use address(0) instead of 0 in one more place in ERC721

* Throw when querying balance for the zero address

Required by the spec

* Update links to approved version of EIP721

* Use explicit size for uint

* Remove unneeded internal function in ERC721

Also rename addToken and removeToken for added clarity

* Use underscore instead of 'do' prefix for internal methods in ERC721

* Fix failing test due to events reordering in ERC721 safe transfer

* Fix bug introduced in 74db03ba06

* Remove do prefix for internal setTokenUri method

* Allow transfers to self in ERC721
2018-03-23 15:11:59 -03:00
9f52e94339 Move ERC20 tests to ERC20 custom folder (#772) 2018-03-22 17:37:05 -03:00
c9936e231d Changed test assertion description for clarity (#831) 2018-03-22 16:36:28 -03:00
e299a7950e Change ECRecovery recover method's visibility to internal (#818)
* Change ECRecovery recover method's visibility to internal

* Adopt the test

* Remove unused imports
2018-03-21 21:38:31 -03:00
b33260ac44 Remove assert and send in favor of transfer for PullPayment.sol (#823)
* Removed assert from send() and changed to transfer()

* Slightly adapted docs
2018-03-21 18:30:58 -03:00
3fb8ecad76 Gender of signer is irrelevant and distracting (#822) 2018-03-19 11:50:07 -03:00
c3cbdb4599 Fix version error for truffle-flattener. (#794) 2018-03-16 13:16:41 -05:00
7586e383c2 Fixes typo in SafeMath subtraction docs (#806) 2018-03-12 12:27:17 -05:00
d1146e8c8b Add Whitelist contract (#746)
* Add Whitelist contract
2018-03-08 10:49:38 -08:00
8d4eee412d Bugfix/fix individuallycapped flaky test (#789)
* Fix InvididuallyCappedCrowdsale flaky test

* Fix IndividuallyCappedCrowdsale flaky test
2018-03-05 18:23:01 -08:00
903751ce0d Tiny indentation fix in MintedCrowdsale (#792)
Tiny indentation fix in MintedCrowdsale
2018-03-05 17:46:00 -08:00
9fd61177c3 Fixed typo in Crowdsale contract comment (#793) 2018-03-05 16:06:58 -03:00
3c48912730 Fix capped crowdsale flaky test (#773) 2018-03-02 15:20:00 -03:00
b3a8602928 Use constructor arguments (#731) 2018-02-26 18:24:19 -03:00
5ef8554727 Add Transfer event to Burnable Token. (#735)
Fixes #732
2018-02-20 15:44:50 -07:00
9ea4bae313 v1.7.0 2018-02-20 18:11:33 -03:00
c05918c3cc Crowdsale refactor and add new models (#744)
* Basic idea

* Fine tuning idea

* Add comments / tidy up Crowdsale base class

* fixed TimedCrowdsale constructor

* added simple crowdsale test

* added HODL directory under home to store unused contracts. ugly hack to solve Crowdsale selection in tests, better way?

* Capped no longer inherits from Timed, added capReached() method (replacing hasEnded())

* added SafeMath in TimedCrowdsale for safety, CHECK whether it is inherited from Crowdsale

* several fixes related to separating Capped from Timed. functions renamed, mocks changed. Capped tests passing

* added TimedCrowdsaleImpl.sol, TimedCrowdsale tests, passed

* added Whitelisted implementation and test, passed.

* removed unnecessary super constructor call in WhitelistedCrowdsale, removed unused dependencies in tests

* renamed UserCappedCrowdsale to IndividuallyCappedCrowdsale, implemented IndividuallyCappedCrowdsaleImpl.sol and corresponding tests, passed.

* homogeneized use of using SafeMath for uint256 across validation crowdsales. checked that it IS indeed inherited, but leaving it there as per Frans suggestion.

* adding questions.md where I track questions, bugs and progress

* modified VariablePriceCrowdsale, added Impl.

* finished VariablePrice, fixed sign, added test, passing.

* changed VariablePrice to IncreasingPrice, added corresponding require()

* MintedCrowdsale done, mock implemented, test passing

* PremintedCrowdsale done, mocks, tests passing

* checked FinalizableCrowdsale

* PostDeliveryCrowdsale done, mock, tests passing.

* RefundableCrowdsale done. Detached Vault. modified mock and test, passing

* renamed crowdsale-refactor to crowdsale in contracts and test

* deleted HODL old contracts

* polished variable names in tests

* fixed typos and removed comments in tests

* Renamed 'crowdsale-refactor' to 'crowdsale' in all imports

* Fix minor param naming issues in Crowdsale functions and added documentation to Crowdsale.sol

* Added documentation to Crowdsale extensions

* removed residual comments and progress tracking files

* added docs for validation crowdsales

* Made user promises in PostDeliveryCrowdsale public so that users can query their promised token balance.

* added docs for distribution crowdsales

* renamed PremintedCrowdsale to AllowanceCrowdsale

* added allowance check function and corresponding test. fixed filename in AllowanceCrowdsale mock.

* spilt Crowdsale _postValidatePurchase in _postValidatePurchase and _updatePurchasingState. changed IndividuallyCappedCrowdsale accordingly.

* polished tests for linter, salve Travis

* polished IncreasingPriceCrowdsale.sol for linter.

* renamed and polished for linter WhitelistedCrowdsale test.

* fixed indentation in IncreasingPriceCrowdsaleImpl.sol for linter

* fixed ignoring token.mint return value in MintedCrowdsale.sol

* expanded docs throughout, fixed minor issues

* extended test coverage for IndividuallyCappedCrowdsale

* Extended WhitelistedCrwodsale test coverage

* roll back decoupling of RefundVault in RefundableCrowdsale

* moved cap exceedance checks in Capped and IndividuallyCapped crowdsales to _preValidatePurchase to save gas

* revert name change, IndividuallyCapped to UserCapped

* extended docs.

* added crowd whitelisting with tests

* added group capping, plus tests

* added modifiers in TimedCrowdsale and WhitelistedCrowdsale

* polished tests for linter

* moved check of whitelisted to modifier, mainly for testing coverage

* fixed minor ordering/polishingafter review

* modified TimedCrowdsale modifier/constructor ordering

* unchanged truffle-config.js

* changed indentation of visibility modifier in mocks

* changed naming of modifier and function to use Open/Closed for TimedCrowdsale

* changed ordering of constructor calls in SampleCrowdsale

* changed startTime and endTime to openingTime and closingTime throughout

* fixed exceeding line lenght for linter

* renamed _emitTokens to _deliverTokens

* renamed addCrowdToWhitelist to addManyToWhitelist

* renamed UserCappedCrowdsale to IndividuallyCappedCrowdsale
2018-02-20 14:05:53 -07:00
108d5f3b4a Remove deprecated docs directory and link to new documentation in readme. (#750)
* Remove deprecated docs directory.

* Update link to docs in readme.
2018-02-16 15:21:13 -03:00
61b6a733c8 Fixed Contribution Guidelines link (#738) 2018-02-15 10:20:32 -03:00
6ad275befb Improve ERC20s tests coverage (#712)
* Improve StandardToken tests coverage
* Improve BasicToken test coverage
* Improve MintableToken test coverage
* Improve BurnableToken test coverage
* Improve PausableToken tests coverage
2018-02-08 14:34:31 -03:00
7a0bfdfbb4 Enhancement/heritable encapsulation #692 (#702)
* Modified Gitignore for Sublime

* Added getter functions for public variables

* Added encapsulation to Heritable public variables.

* Added encapsulation to Heritable public variables.

* Added encapsulation to Heritable public variables.

* Updated tests to use getter methods instead of, now, private variables.

* Conformed variable names to current conventions.

* Requested changes

* revert package-lock.json changes
2018-01-26 18:20:35 -03:00
f4228f1b49 fix: reference contract name rather than filepath (#698) 2018-01-25 11:52:51 -03:00
a5d5867092 feat: update pr templates, closes #696 (#699)
* feat: update pr templates, closes #696

* fix: move lint command to end of bullet
2018-01-25 11:26:29 -03:00
4d7c3cca75 Move token creation outside of crowdsale contract (#690)
Fixes #358
2018-01-24 11:44:35 -03:00
0541347034 v1.6.0 2018-01-23 17:48:04 -03:00
c5d66183ab Move ERC20 contracts to ERC20 custom folder (#701)
* Move ERC20 contracts to ERC20 custom folder

* Fix linter warnings for ERC20 contracts
2018-01-23 17:46:41 -03:00
1eea95f9ac Move ERC721 files to custom folder (#700) 2018-01-23 17:03:05 -03:00
e16c4042c1 Merge pull request #627 from facuspagnuolo/feature/implement_erc721_standard
Implement ERC721 standard
2018-01-23 10:47:28 -03:00
e1d32acae8 Merge branch 'master' into feature/implement_erc721_standard 2018-01-23 10:29:55 -03:00
3b499a9cc3 Merge pull request #687 from sot528/fix/reference-of-rbac-usage
fix reference of RBAC usage.
2018-01-22 19:05:01 -08:00
4e77aaa0c3 Merge branch 'master' into fix/reference-of-rbac-usage 2018-01-22 17:46:47 -08:00
4be30dc3ae Merge branch 'master' into feature/implement_erc721_standard 2018-01-19 17:43:03 -03:00
370e6a882a ERC20 totalSupply changed from public property to a function (#666)
Fixes OpenZeppelin/zeppelin-solidity#434
2018-01-19 17:15:27 -03:00
9cc55ef2a5 use short circuit (#654) 2018-01-19 15:45:48 -03:00
48594890cf Merge branch 'master' into feature/implement_erc721_standard 2018-01-19 15:36:52 -03:00
6979e3c83a Merge pull request #693 from fulldecent/patch-1
Fix test name
2018-01-19 15:28:27 -03:00
96e0d35f11 Merge branch 'master' into fix/reference-of-rbac-usage 2018-01-19 15:17:23 -03:00
66402e9fec Merge branch 'master' into patch-1 2018-01-19 15:15:29 -03:00
5b40202dd3 Merge pull request #691 from frangio/fix-643
Add note about not following semver
2018-01-19 12:53:54 -03:00
da95df6be5 Fix test name 2018-01-18 23:47:02 -05:00
250572f48d add note about not following semver 2018-01-18 18:18:10 -03:00
ff9e9c4d85 Merge pull request #680 from ajsantander/azavalla-feature/inheritable-contract
Azavalla feature/inheritable contract
2018-01-18 17:41:44 -03:00
c8c0f21a3f Merge branch 'master' into azavalla-feature/inheritable-contract 2018-01-18 17:29:48 -03:00
3a9a2c8888 Merge pull request #684 from ajsantander/refactor/info-md-updates
Updates to markdown documentation
2018-01-18 17:27:37 -03:00
a5ea0af65c Merge branch 'master' into azavalla-feature/inheritable-contract 2018-01-18 17:20:07 -03:00
42553ec0c0 Merge branch 'master' into refactor/info-md-updates 2018-01-18 17:14:14 -03:00
c01203b0b7 Index addreses in events and explicit uint size 2018-01-18 16:58:45 -03:00
9d005b492d Explicit uint size 2018-01-18 16:42:19 -03:00
22c1403e5b Fix solidity style issue 2018-01-18 16:42:19 -03:00
3009553925 Update test names and js style 2018-01-18 16:42:19 -03:00
5ea9bd44a1 [Heritable] added HeirOwnershipClaimed event 2018-01-18 16:42:19 -03:00
51c2c50437 [Heritable] ownerLives(): constant --> view 2018-01-18 16:42:19 -03:00
52b6181d78 renamed Inheritable --> Heritable 2018-01-18 16:42:19 -03:00
fe712c678a [SimpleSavingsWallet.js] replace assertJump for expectThrow 2018-01-18 16:42:19 -03:00
c70ee937e6 [Inheritable.js] replace assertJump for expectThrow 2018-01-18 16:42:19 -03:00
46736da489 added test for SimpleSavingsWallet 2018-01-18 16:42:19 -03:00
82c85121bb changed Inherited event for OwnershipTransfered 2018-01-18 16:42:19 -03:00
e5960465a7 owner can't be set as heir 2018-01-18 16:42:19 -03:00
5716492ebd setHeartbeatTimeout: public --> internal 2018-01-18 16:42:19 -03:00
c7807c5b58 changed view for constant 2018-01-18 16:42:19 -03:00
433213537f changed events names on inheritable test 2018-01-18 16:42:19 -03:00
560a855dc7 further example documentation 2018-01-18 16:42:19 -03:00
80ae074c57 marked ownerLives as view 2018-01-18 16:42:19 -03:00
d808e49b51 changed 'pronounce' for 'proclaim' 2018-01-18 16:42:19 -03:00
a8afb20c20 Use Inherited event instead of OwnershipTransfered 2018-01-18 16:42:19 -03:00
a613cd03c9 added example use-case for Inheritable.sol 2018-01-18 16:42:19 -03:00
b709206f9f fixes 2018-01-18 16:42:19 -03:00
2a560ad82f name fix 2018-01-18 16:42:19 -03:00
4fe2157e36 Inheritable contract 2018-01-18 16:42:19 -03:00
5a42a450ac Merge pull request #678 from ernestas2k/fix/rename-erc23-occurrences-to-erc223Mock#675
Rename ERC23 occurrences to ERC223
2018-01-18 11:31:18 -08:00
49adfea68b Merge branch 'master' into fix/rename-erc23-occurrences-to-erc223Mock#675 2018-01-18 11:12:07 -08:00
a29fce9cbd Merge pull request #689 from joejordan/patch-1
Update README.md
2018-01-18 12:48:37 -03:00
7f591a9181 Update README.md
I clarified where the "npm install zeppelin-solidity" command should happen. I got hung up on it initially and I know others have as well.
2018-01-18 10:41:28 -05:00
23afc74b59 Address feedback comments for ERC721 2018-01-18 10:15:59 -03:00
dcf1f8d22d Rename ERC23 occurrences to ERC223 2018-01-18 11:03:43 +02:00
c7f2138da1 Merge pull request #688 from AugustoL/refactor/reorganize-tests
Reorganize tests and add library folder
2018-01-17 18:31:13 -03:00
b67856c69d Separate ERC20 and ERC827 form tokens implementations in contracts and test folders 2018-01-17 16:24:29 -03:00
4fbd44fd40 Reorganize tests and add library folder 2018-01-17 15:59:15 -03:00
2887393712 Merge branch 'master' into fix/reference-of-rbac-usage 2018-01-17 15:31:50 -03:00
af337047a4 Fix solint errors 2018-01-17 12:00:15 -03:00
b0522b9c58 Merge pull request #518 from AugustoL/add-smart-token
Add ERC827 Token
2018-01-17 11:58:57 -03:00
969466b8fd Add ethjs-abi dependency needed in ERC827 tests 2018-01-17 11:22:09 -03:00
2b008f4cb6 Fix solidity linter errors 2018-01-17 11:21:25 -03:00
d060d29912 Merge remote-tracking branch 'upstream/master' into add-smart-token 2018-01-17 11:01:05 -03:00
75439c1dd3 fix reference of RBAC usage. 2018-01-17 21:45:30 +09:00
c8878adcbd Merge branch 'master' into refactor/info-md-updates 2018-01-16 21:57:35 -03:00
d95c3ade8f Minor changes as per feedback from @frangio 2018-01-16 19:52:38 -03:00
7811370000 Remove branching section and remove negative comment 2018-01-16 19:26:10 -03:00
b1e1aadba1 Simplified and updated CONTRIBUTING.md, small update to README.md 2018-01-16 19:11:30 -03:00
7ddd66fb74 fix increaseApproval in ERC827Token with tests 2018-01-16 18:43:50 -03:00
0cdc5e13ce Update ISSUE_TEMPLATE.md 2018-01-16 17:07:39 -03:00
5b50e99a0d ERC721 required functionality tests 2018-01-16 16:05:01 -03:00
b09d7aada4 Implement ERC721 required functionality 2018-01-16 16:04:26 -03:00
5fc5ded661 Provide ERC721 required functionality interface 2018-01-16 16:04:26 -03:00
146a22cd96 Merge pull request #661 from facuspagnuolo/enhancement/organize_test_files
Organize test files following contracts folders structure
2018-01-16 14:52:46 -03:00
b925b2dae6 Organize test files following contracts folders structure 2018-01-16 13:03:35 -03:00
87f5916341 Separate ERC827 interface in another contract 2018-01-15 21:17:32 -03:00
8854966847 change throw for require in MessageHelper contract@ 2018-01-15 21:15:21 -03:00
685d2087ca Add increase and decrease approval functions to ERC827 with tests 2018-01-15 20:56:25 -03:00
7532dab17d Merge pull request #677 from ernestas2k/fix/error-testing-in-delayed-claimable#672
Fix error testing in DelayClaimable tests
2018-01-15 18:48:43 -03:00
73a8be1449 Merge pull request #676 from Shrugs/feat/solidity-highlighting-#671
feat: add solidity syntax highlighting directive, fixes #671
2018-01-15 18:42:00 -03:00
c9fff647f4 Merge branch 'master' into fix/error-testing-in-delayed-claimable#672 2018-01-15 23:35:26 +02:00
ec2f7ba8d1 Merge pull request #673 from Shrugs/feat/solium
Solium Integration, Linting Refactor
2018-01-15 18:34:55 -03:00
a4029e7472 Fix error testing in DelayClaimable tests 2018-01-15 23:28:31 +02:00
ad5edd329f feat: add solidity syntax highlighting directive, fixes #671 2018-01-15 16:24:18 -05:00
955517dc2e fix: add ignore directives to SampleCrowdsale and SimpleToken 2018-01-15 16:11:45 -05:00
3b48a671fd fix: solium errors - whitespace related 2018-01-15 16:11:45 -05:00
bd2f1773cd fix: solium errors - function-order only 2018-01-15 16:11:45 -05:00
e60aee61f2 fix: solium errors - blank-line only 2018-01-15 16:11:45 -05:00
b2e2d9ab1c fix: solium errors - indentation only 2018-01-15 16:11:45 -05:00
4d263b7fc3 fix: the result of 'npm run lint:sol:fix' 2018-01-15 16:11:45 -05:00
e0f3fea97f feat: add solium linting to travis, npm script 2018-01-15 16:07:34 -05:00
d4dc4b25c8 fix: remove warning on timestamp usage 2018-01-15 16:07:34 -05:00
c1244d6297 updated soliumrc - Solium v1 compatible 2018-01-15 16:07:34 -05:00
462c52bcbf Merge pull request #601 from elopio/test/math
test: add tests for max64 and min64 from Math
2018-01-15 18:05:19 -03:00
9f68c00855 Merge pull request #667 from spalladino/feature/655-safemath_docs
Add documentation to safemath functions
2018-01-15 18:03:09 -03:00
4dcf8f5bd0 Merge pull request #674 from frangio/add-missing-awaits
Add missing awaits in tests
2018-01-15 17:38:05 -03:00
ea1cb5c54e add missing awaits in tests 2018-01-15 17:27:45 -03:00
49b42e8696 Minor change in SafeMath sub documentation 2018-01-15 15:44:06 -03:00
beea818f4e Merge pull request #638 from LimelabsTech/master
BuyTokens getting the token amount from a function instead of just multiplication. Useful for making Crowdsales with bonus periods
2018-01-15 15:42:49 -03:00
13b75bd5af Merge branch 'master' into master 2018-01-15 15:32:39 -03:00
e911b4d556 Add findMethod function in ERC827Token test 2018-01-12 13:08:55 -03:00
7bd95b1e31 Overload ERC20 funcitons with new _data argument 2018-01-11 16:35:21 -03:00
4ecdf312df Change order of ERC20 methods and call in transferData and transferDataFrom 2018-01-11 13:56:52 -03:00
f36f8e96dc Delete SmartToken old docs 2018-01-11 13:53:21 -03:00
e57f4be1fb Rename SmartToken to ERC827 2018-01-11 13:52:36 -03:00
a806520d6f change SmartToken test to work with new linter rules 2018-01-11 12:57:30 -03:00
a4b1cd6e31 Add SmartToken contract with tests and documentation
add missing public identifier in approveData in SmartToken contract

remove constact from showMessage function in message helper contract

move Message helper contract to mocks folder

move SmartTokenMock contract to mocks folder
2018-01-11 12:57:30 -03:00
21297e2b2c Add documentation to safemath functions
Fixes #655
2018-01-11 11:12:13 -03:00
94697726f5 Merge pull request #664 from Shrugs/fix/pr-template-syntax
fixup: issue template mdown syntax
2018-01-11 00:57:22 -05:00
a58e3e151a fixup: pr template mdown syntax 2018-01-10 15:08:23 -05:00
790b3b20c2 Merge pull request #646 from Shrugs/feat/npm-lint-fix-#642
feat: add 'npm run lint:fix' script
2018-01-09 18:52:55 -03:00
ed6e51494e Merge pull request #660 from facuspagnuolo/bugfix/659_add_transfer_event_to_simple_token
Emit Transfer event on SimpleToken creation
2018-01-09 15:53:10 -03:00
17884e91a1 Emit Trasnfer event on SimpleToken creation 2018-01-09 15:34:05 -03:00
59cd714b84 Merge pull request #641 from Shrugs/feat/issue-templates-#639
feat: implement issue and pr templates
2018-01-08 15:17:25 -03:00
a24031854b Merge branch 'master' into master 2018-01-07 22:27:03 +02:00
6cd84ffceb feat: add 'npm run lint:fix' script 2018-01-05 11:01:18 -06:00
29edd4e15e feat: implement issue and pr templates 2018-01-05 11:00:37 -06:00
6af6efc198 Merge pull request #635 from AugustoL/test/ECRecoveryMock
Add ECRecoveryMock contract
2018-01-05 13:55:55 -03:00
586c88802d Changed constant to view and more expressive comment 2018-01-05 17:30:10 +02:00
edbc64f337 Add missing semicolon in ECRecovery test 2018-01-04 16:39:41 -03:00
c73861d8b3 Use test message in ECRecovery tests and fix typos 2018-01-04 15:51:55 -03:00
d78bcbbae5 change web3.eth.accounts for accounts in ECRecovery test 2018-01-04 15:51:55 -03:00
326df13bf3 Add ECRecoveryMock contract 2018-01-04 15:51:55 -03:00
7852583fde reverted package.json file 2018-01-04 15:49:59 +02:00
5993f5b371 reverted back the version 2018-01-04 11:44:07 +02:00
04946211a5 Using the new overridable function 2018-01-03 11:14:02 +02:00
2f2ef68652 Increased Minor Version 2018-01-03 10:59:53 +02:00
ebdba08218 Added overridable getTokenAmount function 2018-01-03 10:54:30 +02:00
a74b7bd4b1 Merge pull request #613 from federicobond/remove-duplicate-constructor
Remove duplicated constructor call in FinalizableCrowdsaleImpl
2018-01-02 16:48:06 -03:00
090e2fca16 Remove duplicated constructor call in FinalizableCrowdsaleImpl 2018-01-02 16:26:02 -03:00
dbe8898d00 Merge pull request #636 from OpenZeppelin/release/v1.5.0
v1.5.0
2018-01-02 15:25:34 -03:00
52b2a619c7 Merge pull request #603 from elopio/patch-1
fix typo: that -> than
2018-01-02 13:14:04 -03:00
58ecbd6104 fix typo: that -> than 2018-01-02 15:58:35 +00:00
9aa61ad273 Merge pull request #634 from Shrugs/fix/destructible-typo
fix: TokenDestructible typo fron->from
2018-01-02 11:07:09 -03:00
7aa6f21147 fix: TokenDestructible typo fron->from 2017-12-31 19:06:38 +04:00
323d1fa941 Refactor assert revert helper to encapsulate promises (#628) 2017-12-28 00:39:55 -03:00
4073cf6585 v1.5.0 2017-12-22 19:50:42 -03:00
4ce0e211c5 Merge pull request #604 from elopio/tests/fix-ReentrancyGuard
test: fix the mocks path in ReentrancyGuard test
2017-12-22 18:41:58 -03:00
9af6ad5ddf Merge pull request #610 from TalAter/master
Documented increaseApproval() and decreaseApproval()
2017-12-22 18:32:38 -03:00
2f336f7aaf Merge pull request #614 from him2him2/master
Update HTTP -> HTTPS
2017-12-22 18:02:15 -03:00
5751eac444 Merge pull request #617 from spalladino/feature/reenable-coverage
Re-enable solidity coverage
2017-12-22 17:27:19 -03:00
cda518d353 Merge pull request #624 from AugustoL/change-uint-tokentimelock
Use uint256 in TokenTimeLock contract
2017-12-22 12:32:19 -03:00
f446f5c5cd Use uint256 in TokenTimeLock contract 2017-12-22 10:34:29 -03:00
1455a5a942 Re-enable solidity coverage
- Upgrade version
- Re-enable in travis.yml
- Move mocks to contracts folder for instrumentation
2017-12-20 18:28:22 -03:00
207b92f63c Merge pull request #602 from nemild/patch-1
Consistent spellings of reentrant
2017-12-20 15:40:27 -03:00
b217ef6314 Update HTTP -> HTTPS
URLs were updated to use HTTPS protocol
2017-12-19 15:32:38 -08:00
687dc19a4a Documented increaseApproval() and decreaseApproval() 2017-12-14 20:14:58 +02:00
161f25fc12 Made spelling for 'reentrant' consistent in comment 2017-12-07 22:48:55 -08:00
4bb26c32b6 test: fix the mocks path in ReentrancyGuard test 2017-12-08 02:57:29 +00:00
d91f4d4bc1 Consistent spellings of reentrant
Changed `rentrancy_lock` variable to `reentrancy_lock`
2017-12-06 16:03:55 -08:00
ddcae6254e Merge pull request #600 from izetex/fix/burnable-token-inheritance
Burnable Token should be inherited from Basic Token issue#596
2017-12-06 12:25:35 -03:00
fdfd90e6a4 fix the eslint static check 2017-12-06 14:57:41 +00:00
f162638cde test: add tests for max64 and min64 from Math 2017-12-06 06:37:45 +00:00
8375b6085f Burnable Token should be inherited from Basic Token issue#596 2017-12-06 08:08:42 +03:00
83b941c76c Merge pull request #580 from Shrugs/feat/rbac
feat: RBAC authentication contract and role library
2017-12-04 12:30:38 -03:00
63c8751e06 fix: linter errors 2017-12-04 17:08:28 +02:00
306132f823 Merge pull request #597 from JesseBusman/master
There's no need to throw when burning 0 tokens
2017-12-04 11:15:30 -03:00
677d05743c feat: update event names for OZ standards and test them 2017-12-04 13:42:55 +02:00
aef0f63aee There's no need to throw when burning 0 tokens
Throwing when trying to burn 0 tokens is an unnecessary special case.
If another contract wants to burn() a variable amount, it should not be forced to deal with this special case of burning 0.
2017-12-03 12:08:53 +01:00
5e55569db6 fix: make roles private 2017-12-01 18:15:44 +02:00
9bb2c958ec feat: add adminAddRole, adminRemoveRole, and make hasRole/checkRole public 2017-12-01 18:15:44 +02:00
e931c1cbfc feat: RBAC authentication contract and role library 2017-12-01 18:15:44 +02:00
dd1fd0002a Merge pull request #581 from Shrugs/feat/minor-additions
Minor standards and cleanup additions.
2017-12-01 12:22:01 -03:00
ac3808885a fix: default to empty string for mnemonic 2017-12-01 13:43:25 +02:00
258c001f7f feat: add linting to travis script 2017-12-01 13:40:11 +02:00
d07bdccc0c feat: manually fix linting errors across tests 2017-12-01 13:40:09 +02:00
227a335399 feat: move mock solidity contracts to mocks/ folder 2017-12-01 13:39:13 +02:00
58abd66969 feat: rename all test files to include .test.js postfix 2017-12-01 13:37:12 +02:00
8662846838 feat: apply eslint --fix across project 2017-12-01 13:37:09 +02:00
6ea0577bfe feat: enable eslint 2017-12-01 11:44:41 +02:00
b9b26e1d8a feat: allow configuration of ropsten and ganache with env variables 2017-12-01 11:43:49 +02:00
887c1bb925 feat: more comprehensive gitignore 2017-12-01 11:43:49 +02:00
cc5e898250 Merge pull request #588 from BrandonGilchrist/feature/delayed-crowdsale-docs
Add docs for DelayedClaimable
2017-11-29 18:36:33 -03:00
1cef36b5c0 Merge pull request #585 from Shrugs/feat/only-npm
feat: remove yarn in favor of npm
2017-11-29 11:59:28 -03:00
c95be493c3 fix: remove engines 2017-11-29 14:11:04 +02:00
bddc8755c1 Add docs for DelayedClaimable 2017-11-28 15:04:42 -08:00
3ad555bb01 fix: remove duplicate npm ls 2017-11-28 13:21:22 +02:00
846b0714ad feat: remove yarn in favor of npm 2017-11-27 20:44:59 +02:00
f79f7b00e3 Merge pull request #582 from Shrugs/fix/split-payment-payable
fix: make SplitPayment payable by default
2017-11-27 12:54:12 -03:00
47585b1117 fix: make SplitPayment payable by default 2017-11-24 17:02:53 +02:00
b7e7c765e0 v1.4.0 2017-11-23 13:30:54 -03:00
9e1da49f23 sync yarn.lock with package-lock.json 2017-11-23 13:21:05 -03:00
c29dd086d3 Update to testrpc 6.0.1 and test fixes for revert opcode. 2017-11-23 13:06:05 -03:00
b9cbea1c9c Merge pull request #576 from ajsantander/master
Address new compiler warnings
2017-11-23 12:54:44 -03:00
b254b74b87 Merge pull request #577 from redsquirrel/patch-1
Minor formatting change
2017-11-23 12:47:51 -03:00
bb1736e376 Change visibility of fallbacks to external 2017-11-23 12:28:46 -03:00
11349835e9 Minor formatting change 2017-11-23 08:22:59 -06:00
c6e0edb268 Remove solidity warnings in tests 2017-11-23 10:57:36 -03:00
b50391862c Changes to remove warnings 2017-11-23 10:41:18 -03:00
0bcf0a2001 Merge pull request #573 from ajsantander/master
Update to truffle 4.0.0 and solc 0.4.18
2017-11-22 19:26:38 -03:00
0eaa5f50ac Disable solidity-coverage
This is required to update to truffle 4 and solc 0.4.18, see PR #573
2017-11-22 19:08:31 -03:00
ce86029f6a Update solidity version on test helpers 2017-11-22 19:00:13 -03:00
815d9e1f45 Replace constant with view/pure 2017-11-22 18:59:54 -03:00
e6213767fa Update all solidity versions to 0.4.18 2017-11-22 18:52:52 -03:00
f28c245a3c Update to truffle 4.0.0
had to up the gasLimit in test.sh to avoid an out of gas error when deploying the scripts
2017-11-22 18:52:52 -03:00
12303ceaf5 fix treatment of bignumber in CappedToken test 2017-11-22 15:27:52 -03:00
9001ce9d3a Merge pull request #515 from cwhinfrey/master
Create CappedToken, a capped MintableToken
2017-11-22 15:25:12 -03:00
492ef4a419 Merge pull request #571 from quantum13/patch-1
Small code style change
2017-11-22 14:33:01 -03:00
5f67dd7868 Merge pull request #574 from gakonst/master
Fix unused variable warning in `Standard Token.sol`
2017-11-22 14:32:19 -03:00
3c5a268da4 fixes #572 2017-11-22 12:55:11 +00:00
db5a12cfdd Merge pull request #506 from TalAter/fix/deprecated-throw-in-tests
Replace deprecated throw with assert in Solidity tests
2017-11-21 14:41:31 -03:00
03ad0efd29 Small code style change
http://solidity.readthedocs.io/en/develop/style-guide.html#other-recommendations
The visibility modifiers for a function should come before any custom modifiers.
2017-11-20 23:13:32 +03:00
5fc53b6f2f Replaced assert with require 2017-11-19 01:34:24 +02:00
99f3e26f83 Merge pull request #568 from frangio/readme-npm-init
Add npm init in README
2017-11-17 17:50:55 -03:00
151371cc86 add npm init in README 2017-11-17 17:34:36 -03:00
376208bd96 Merge pull request #566 from onbjerg/patch-1
Make coverage badge flat
2017-11-17 16:59:15 -03:00
11b63d4fc1 Revert alt text for coverage badge 2017-11-17 20:49:41 +01:00
39ae5b4cca Make coverage badge flat 2017-11-17 13:16:00 +01:00
670b843b63 Merge pull request #553 from limexp/fix/534-ci-versions-info
added versions output to Travis CI log #534
2017-11-16 15:16:09 -03:00
070d25dc9e Merge pull request #564 from spalladino/fix/travis-no-prs-notifications
Do not notify via Slack about PR build failures
2017-11-16 12:29:38 -03:00
9684ce76c5 Do not notify via Slack on PRs 2017-11-16 10:20:34 -03:00
d919f0dde2 Merge pull request #487 from limexp/fix/docs
fix docs issue #459 and align with README.md
2017-11-15 18:27:10 -03:00
689e18aab5 Merge branch 'master' into fix/docs 2017-11-15 18:19:12 -03:00
8765e2a53f Use instead of directly calling on 2017-11-15 16:14:28 -05:00
7a19bcf6d9 Merge pull request #505 from ZumZoom/patch-1
Finish minting should be called only once
2017-11-15 11:59:05 -03:00
088897150e Merge pull request #526 from amazingandyyy/patch-1
Update RefundVault.sol
2017-11-15 11:56:03 -03:00
34be16d939 Merge pull request #522 from emn178/feature/improve_mul
improve mul performance and reduce gas cost
2017-11-14 17:49:09 -03:00
14ae881e26 Merge pull request #544 from maraoz/timer-improvement
remove timer test helper
2017-11-14 17:24:42 -03:00
666a3a73e0 remove unused 'day' test variable 2017-11-14 12:50:43 -05:00
84bffb854a Merge pull request #477 from facuspagnuolo/feaure/create_detailed_erc20_interface
Create detailed ERC20 interface
2017-11-13 15:42:09 -03:00
365c875ced Create detailed ERC20 interface 2017-11-13 15:36:02 -03:00
7dd0ee6212 remove timer 2017-11-12 15:10:46 -05:00
7123faff9f added versions output to Travis CI log #534 2017-11-11 16:32:38 +03:00
61b5921ab2 Fix typo 2017-11-10 20:20:44 -05:00
e72c7ce91b Merge pull request #417 from abarmat/feature-splitpayment-contract
Feature SplitPayment contract
2017-11-10 18:45:56 -03:00
c4ca7f03e3 improve timer test helper 2017-11-10 13:29:58 -08:00
9be77ddd54 Merge pull request #469 from nedodn/patch-2
Update TokenTimelock.sol: Issue #464
2017-11-10 17:44:20 -03:00
70a17d0b96 Merge pull request #475 from et/patch-2
Add `npm init`
2017-11-10 17:31:58 -03:00
ad2282456e Merge pull request #478 from rudygodoy/patch-2
Fixes typos in documentation
2017-11-10 17:26:00 -03:00
fe3e360483 Merge pull request #482 from sohkai/patch-1
Small typo fixes for bounty docs
2017-11-10 17:24:26 -03:00
5a857fc1a7 Merge pull request #490 from Nedudi/master
Update SimpleToken.sol
2017-11-10 17:15:52 -03:00
c5cd35b2ea Merge pull request #504 from FloorLamp/patch-1
Update ecrecovery.rst
2017-11-10 17:07:16 -03:00
a808b0b03f Merge pull request #523 from thesved/patch-1
Math.sol is not used, not needed
2017-11-10 16:19:01 -03:00
4e8f422a81 Merge pull request #542 from spalladino/feature/travis-notifications
Add Slack notifications
2017-11-10 15:27:03 -03:00
070226d624 Add Slack notifications 2017-11-10 13:18:20 -03:00
2413f83504 Include 'revert' in expectThrow() helper 2017-11-10 11:41:17 -03:00
be692e59eb Update RefundVault.sol 2017-10-31 00:13:27 -07:00
e74652415f Math.sol is not used, not needed
Small thing, but the Math.sol is not really needed, since it is not used.
2017-10-30 11:07:26 +01:00
5ad07e1892 improve mum performance and reduce gas cost 2017-10-30 09:58:52 +08:00
575372f660 Add Capped Token tests 2017-10-25 23:58:36 -04:00
7a26a0ecf1 Add capped token contract 2017-10-25 23:57:21 -04:00
8e01dd14f9 Merge pull request #510 from doraemondrian/master
Use address(0) instead of 0x0
2017-10-24 16:46:05 -03:00
5088c64140 Merge pull request #503 from martriay/fix-missing-safemath
[TokenVesting] Add missing safemath ops
2017-10-23 12:53:25 -03:00
ac4a19dd7d Use address type 2017-10-23 03:11:14 -07:00
09b1926c41 Use address type 2017-10-23 03:10:40 -07:00
d7b67eca52 Use address type 2017-10-23 03:10:00 -07:00
e4427befbb Use address type 2017-10-23 03:08:30 -07:00
ca1babe1f7 Use address type 2017-10-23 03:06:51 -07:00
1d54b86a7c Replace deprecated throw with assert in Solidity tests 2017-10-17 21:02:47 +03:00
2d83c557b1 Finish minting should me called only once
Multiple calls to `finishMinting` will emit multiple `MintFinished` events which may be surprising if one rely on `MintFinished` event.
2017-10-17 16:24:16 +03:00
dfb9ebd647 Update ecrecovery.rst
Fix typo
2017-10-16 17:50:25 -04:00
b60e434e0b [TokenVesting] Add missing safemath ops 2017-10-16 03:48:32 -03:00
39d6c92069 Merge pull request #497 from martriay/token-vesting-fix
[TokenVesting] vestedAmount should return the historical vested amount
2017-10-13 16:46:37 -03:00
eb9f88bafc [TokenVesting] Remove unused variable 2017-10-13 16:20:24 -03:00
aa431dfb20 [TokenVesting] Increase released amount before transfer 2017-10-13 16:13:54 -03:00
fff8e040b7 [TokenVesting] vestedAmount returns the historical vested amount 2017-10-13 15:32:44 -03:00
74636b7333 [TokenVesting] Use SafeMath 2017-10-12 00:34:03 -03:00
647fc13963 Merge pull request #492 from frangio/fix-vesting-revoke
TokenVesting bugfix
2017-10-11 16:58:21 -03:00
d5e0714faf use safeTransfer 2017-10-11 16:31:31 -03:00
a184013d1e explicitly mark functions public 2017-10-09 19:08:32 -03:00
7d08c4da7f make TokenVesting variables public 2017-10-09 19:02:57 -03:00
01b92d1d56 fix a problem when revoke is called twice 2017-10-09 19:01:04 -03:00
790833e5d4 Update SimpleToken.sol 2017-10-08 04:26:21 +03:00
2cb2799a51 align docs developer-resources.rst with README.md 2017-10-07 23:44:43 +03:00
9dcf37dd19 align docs getting-started.rst with README.md 2017-10-07 23:37:37 +03:00
0d89e99ceb Fix contracts path issue 2017-10-07 23:24:23 +03:00
a5a1be7219 Fixing docs issue #459 2017-10-07 23:21:58 +03:00
5aba967db9 Merge pull request #476 from martriay/add-token-vesting
Add token vesting
2017-10-05 18:44:39 -03:00
ffd1090718 [TokenVesting] Remove VestedTokenMock 2017-10-04 18:08:36 -03:00
22b9263674 [TokenVesting] Remove VestedToken and LimitedTranferToken 2017-10-04 14:52:55 -03:00
d21d35ca6f [TokenVesting] Fix test. 2017-10-04 14:52:31 -03:00
4e39f50aec [TokenVesting] Remove unnecessary instatiation on test. 2017-10-04 14:52:31 -03:00
9e0e80e820 [TokenVesting] Allow instantiation of already started vesting contracts. Improve comments' wording. 2017-10-04 14:52:31 -03:00
562fb6945f [TokenVesting] Rename events according to convention 2017-10-04 14:52:31 -03:00
822de45bfc [TokenVesting] Add a start parameter to constructor to defer vesting 2017-10-04 14:52:30 -03:00
bd56163900 [TokenVesting] Fix vestedAmount calculation. Linearity test watches beneficiary balance over vestedAmount 2017-10-04 14:52:30 -03:00
696615d392 [TokenVesting] Add linear release test 2017-10-04 14:52:30 -03:00
645edfc936 [TokenVesting] Fix should-revoke test 2017-10-04 14:52:30 -03:00
a227b212f5 [TokenVesting] Add tests 2017-10-04 14:52:30 -03:00
c11265e694 [TokenVesting] Add events 2017-10-04 14:52:30 -03:00
6344a76f83 add pending tests 2017-10-04 14:52:30 -03:00
3da7c31484 add revocable flag 2017-10-04 14:52:30 -03:00
998c72ab5b add preconditions to constructor 2017-10-04 14:52:30 -03:00
00f323d132 add shortcut for vestedAmount after vesting end 2017-10-04 14:52:30 -03:00
80e591f487 add TokenVesting contract 2017-10-04 14:52:30 -03:00
1333f45cdc Add missing code blocks to bounty docs 2017-10-01 22:34:58 -04:00
2ad88b59f6 Small indenting fix for bounty docs 2017-10-01 22:27:42 -04:00
a9055f5ce2 Fixes typos 2017-09-29 14:55:18 -05:00
9b0e89c4bf Add npm init
If you don't do this, you'll receive this error:

```
❯ zeppelin npm install zeppelin-solidity
npm WARN saveError ENOENT: no such file or directory, open '/Users/et/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/Users/et/package.json'
npm WARN et No description
npm WARN et No repository field.
npm WARN et No README data
npm WARN et No license field.

+ zeppelin-solidity@1.3.0
updated 1 package in 0.677s
```
2017-09-28 17:18:47 -06:00
27f8609ac9 Update TokenTimelock.sol: Issue #464
Removed deprecated function claim() as per Issue #464.
2017-09-27 14:07:08 -05:00
5cf503673f Merge pull request #466 from phiferd/master
Using require for Token preconditions
2017-09-25 11:53:50 -03:00
3837319141 Adding some additional tests 2017-09-23 17:06:14 +08:00
e70dd18734 Moving business logic preconditions to the beginning of the function. 2017-09-23 11:57:29 +08:00
158a7a881d Merge pull request #460 from dmx374/patch-3
Add explicit visibility
2017-09-22 17:32:39 +02:00
725ed40a57 v1.3.0 2017-09-21 14:18:08 -03:00
3733c069c9 Add explicit visibility 2017-09-19 08:29:03 +02:00
1df75a951f Merge pull request #446 from jakub-wojciechowski/master
Make approve method compliant with ERC20
2017-09-18 18:38:37 -03:00
adfd8fb6a9 Warning in approve method documentation. 2017-09-18 18:38:05 -03:00
98f672b534 Make approve method compliant with ERC20 2017-09-18 18:38:05 -03:00
e9068859b6 Merge pull request #448 from SylTi/fix/small-fixes
A bunch of small fixes
2017-09-18 18:18:55 -03:00
1203a2473d add whenNotPaused modifier to all of PausableToken functions that modify it's state. Fix #401 2017-09-18 22:49:22 +02:00
4a1ff913ab replace var by uint256 in StandardToken. Fix #432 2017-09-18 22:46:52 +02:00
83918cad4b change approve() to conform to ERC20. Fix #438 2017-09-18 22:46:52 +02:00
d3c5ce268f Merge pull request #260 from yondonfu/feature/merkleproof
Merkle proof library with tests and docs
2017-09-18 16:47:17 -03:00
f60c5ad88a Merge pull request #445 from frangio/fix-leftover-testrpc
Properly kill background testrpc instance
2017-09-18 15:54:42 -03:00
bcda5bfe9b Merge branch 'master' into feature/merkleproof 2017-09-18 14:01:10 -04:00
33eb8b1da5 Merge pull request #457 from sot528/fix-typo
Just fix typo.
2017-09-18 14:26:21 -03:00
b069827bad fix typo. 2017-09-19 01:57:50 +09:00
74e416f04f Merge pull request #450 from dmx374/master
Explicit public visibility on methods
2017-09-18 12:58:34 -03:00
b395b06b65 Explicit public visibility on methods 2017-09-18 12:57:46 -03:00
bd84db735d Merge pull request #450 from aupiff/master
removing trailing whitespace
2017-09-18 12:01:22 -03:00
bd99b207c9 Merge pull request #454 from economicnetwork/master
comments on vesting
2017-09-18 11:46:48 -03:00
2438557255 explain cliff 2017-09-18 12:41:54 +07:00
9f1826d83e vesting: more corrections on comments 2017-09-18 12:22:23 +07:00
676f5f6931 comments on vesting 2017-09-18 12:18:10 +07:00
6d8bb497c8 removing trailing whitespace 2017-09-16 10:20:06 -04:00
5fd8684a5a properly kill background testrpc instance 2017-09-14 15:40:14 -03:00
1737555b0d Merge pull request #439 from frangio/fix-436
Remove indexed declaration of value in Burn event
2017-09-11 12:28:30 -03:00
eda63c75c4 Merge pull request #440 from spalladino/fix/simple_token_initial_supply
Fix INITIAL_SUPPLY in SimpleToken example
2017-09-11 12:27:35 -03:00
61f62eb3c7 Fix INITIAL_SUPPLY in SimpleToken example
Use token decimals
2017-09-11 12:13:19 -03:00
f96ebfca31 cosmetic changes to BurnableToken 2017-09-11 12:11:00 -03:00
fac580d1a9 remove indexed declaration of uint event parameter 2017-09-11 12:08:23 -03:00
dc1017c929 Simplify implementation using similar interface as PullPayment contract 2017-09-09 12:04:31 -03:00
07b688a0e6 Merge pull request #430 from frangio/fix-unchecked-transfer
Use SafeERC20 to transfer tokens safely
2017-09-07 20:33:43 -03:00
20187f2970 use SafeERC20#safeTransfer 2017-09-07 20:04:48 -03:00
84be318ca9 Merge pull request #424 from eugene-babichenko/transfer-ownership-event
Add OwnershipTransferred event to Ownable contract and its derivatives
2017-09-07 11:59:29 -03:00
5035718e4b fixed wrong call order in Ownable.transferOwnership 2017-09-07 11:59:36 +03:00
fdc8fbaa45 Merge pull request #428 from frangio/fix-425-pausable-docs
Fix Pausable documentation
2017-09-06 16:25:37 -03:00
99887da49a fix Pausable documentation 2017-09-06 15:07:12 -03:00
7a36a6c92a fix calls to OwnershipTransferred 2017-09-06 10:31:23 +03:00
6beac0f215 add previousOwner field to OwnershipTransferred event 2017-09-06 10:29:25 +03:00
b59469c151 fire OwnershipTransferred event when the owner of an Ownable contract instance actually changed 2017-09-05 18:32:07 +03:00
b07466a477 Merge pull request #420 from sh4ka/patch-1
Fix docblock syntax
2017-09-01 11:25:50 -03:00
0bd22e78d3 Fix docblock syntax 2017-09-01 14:03:31 +01:00
69e83e5086 Add a SplitPullPayment contract that combines distribution of funds and delayed withdrawal from each party 2017-08-29 12:06:24 -03:00
8336785a9b Add a SplitPayment contract to distribute funds among multiple beneficiaries 2017-08-29 12:06:23 -03:00
f073352632 Merge pull request #416 from frangio/add-comment-basictoken-throw
Add comment making explicit that transfer throws without enough balance
2017-08-29 12:05:14 -03:00
aad25205cd add comment making explicit that SafeMath.sub can throw 2017-08-29 11:51:41 -03:00
dcdc453a55 Merge pull request #413 from frangio/add-safe-erc20
Add SafeERC20 helpers
2017-08-28 19:43:32 -03:00
5636575327 Merge pull request #415 from frangio/merge-411-manually
Check that destination of token transfers is not 0x0
2017-08-28 19:41:29 -03:00
00f80c726a fix reference to mock contract 2017-08-28 19:31:19 -03:00
74db6c2b3b add missing test for error when doing transferFrom to 0x0 2017-08-28 19:31:19 -03:00
d095ba84bf Add tests to check transfers to 0x0 fail 2017-08-28 19:31:19 -03:00
209e2de93b Fix for #400: Check that destination of token transfers is not 0x 2017-08-28 19:31:07 -03:00
c37c233d22 add SafeERC20 tests for succeeding operations 2017-08-28 19:27:56 -03:00
7b463769a5 explain how to use SafeERC20 2017-08-28 17:34:25 -03:00
c7636bdc4c add safe ERC20 helpers 2017-08-28 17:32:18 -03:00
307d34e05a Merge pull request #407 from frangio/rename-truffle-config
Rename Truffle config file
2017-08-25 20:47:43 -03:00
69e21dacb8 rename truffle.js to truffle-config.js 2017-08-25 20:08:54 -03:00
f27a1ac040 update solidity-coverage to 0.2.2 2017-08-25 20:08:54 -03:00
af6fdae3dd Merge pull request #348 from SylTi/refactor/HasNoToken
refactor HasNoTokens.sol to extract reclaimToken
2017-08-24 20:24:34 -03:00
6ae22e084a Merge pull request #406 from frangio/update-testrpc-4.1.1
Update testrpc to 4.1.1
2017-08-24 19:41:31 -03:00
d463b26709 bump testrpc to 4.1.1 2017-08-24 18:36:03 -03:00
271e6192e8 remove moment.js from package-lock 2017-08-24 18:36:03 -03:00
51906bae6c refactor 2017-08-24 21:42:31 +02:00
406004a99a refactor HasNoTokens.sol 2017-08-24 21:42:31 +02:00
b50894aabe Merge pull request #405 from androolloyd/fix/396-make-decimals-uint8-in-token-example
changed decimal to be uint8 so that it matches the ERC20 specification.
2017-08-24 11:12:29 -03:00
d6f07267ee Merge pull request #403 from rstormsf/patch-2
Remove confusing comment left from FinalizableCrowdsale
2017-08-24 11:07:51 -03:00
1827cbfd2a changed decimal to be uint8 so that it matches the ERC20 specification. 2017-08-24 10:41:41 -03:00
a0c0cb66c5 Remove confusing comment left from FinalizableCrowdsale
AFter this PR 
https://github.com/OpenZeppelin/zeppelin-solidity/pull/364
the comment was left.
2017-08-23 18:57:22 -07:00
47aa4bbf8f Merge pull request #394 from sot528/fix/remove-coverall-script
Removed coveralls script from package.json
2017-08-22 20:48:37 -03:00
33de70158c remove coveralls script from package.json 2017-08-22 10:15:21 +09:00
f45a4e8243 Merge pull request #392 from OpenZeppelin/revert-376-bugfix/windowsIncompatibilty
Revert Truffle config renaming
2017-08-21 16:30:02 -03:00
ac75f4e2ed Revert "[bugfix] windows incompatibilty" 2017-08-21 16:04:30 -03:00
631748480e Merge pull request #391 from rudygodoy/pr-224-tests
Added tests for PR #224
2017-08-21 15:47:02 -03:00
3d5c759d62 Merge pull request #388 from duckranger/patch-1
Update limitbalance.rst
2017-08-21 15:36:51 -03:00
2e0440e549 Merge pull request #389 from duckranger/patch-2
Update pullpayment.rst
2017-08-21 15:36:31 -03:00
86beb5b730 Merge pull request #376 from SylTi/bugfix/windowsIncompatibilty
[bugfix] windows incompatibilty
2017-08-21 15:34:40 -03:00
289fd87ef8 Tests increase and decrease allowance for spender
- Spender starts with 0 tokens allowed to spend
- Spender is granted 50, then decreased it's allowance by 10

Refs PR #224
2017-08-20 23:20:09 -05:00
8b11035b39 Indentation refactoring. 2017-08-20 23:13:39 -05:00
21f251eafb Removed onlyPayloadSize modifier 2017-08-20 23:11:23 -05:00
e7b1c33955 Update StandardToken.sol
Added increaseApproval and decreaseApproval to increase / decrease the approval in 1 transaction.
2017-08-20 23:10:28 -05:00
1da0467820 Update pullpayment.rst
Fixed typo
2017-08-20 22:00:42 +12:00
05609de044 Update limitbalance.rst
Fixed typo
2017-08-20 21:58:27 +12:00
02fb43ff52 Merge pull request #386 from frangio/remove-packagejson-main
Remove main field from package.json
2017-08-19 18:35:14 -03:00
1626c0095f Merge pull request #369 from frangio/parallelize-travis
Make Travis run tests and coverage in parallel
2017-08-19 18:34:09 -03:00
341ce621a9 remove main field from package.json 2017-08-19 18:22:42 -03:00
52efe2412c Merge pull request #384 from frangio/fix-pausabletoken-documentation
Fix PausableToken documentation
2017-08-19 16:40:13 -03:00
84e3e76bb8 fix PausableToken documentation 2017-08-19 16:35:46 -03:00
1d162e95c5 Merge pull request #377 from yaronvel/master
fix for issue 375: transferFrom allows sending to self more than self balance
2017-08-19 16:26:46 -03:00
060843d912 Merge pull request #380 from skywinder/typo-fix
Fixed typos in documentation
2017-08-19 16:24:31 -03:00
d3bc0a4ef7 Merge pull request #379 from skywinder/patch-1
Fixed typo in documentation
2017-08-19 16:22:58 -03:00
d1a82dde63 Merge pull request #373 from Neurone/patch-1
Fix mispelled words (#371)
2017-08-19 16:06:57 -03:00
99efe80c61 fixed typos in standart token doc 2017-08-18 15:35:13 +03:00
b12db57f34 Fixed typo
recieve -> receive
2017-08-18 15:25:15 +03:00
9333fec5f1 fix to issue 375 2017-08-17 21:56:11 +03:00
6f94af9264 fix windows incompatibilty 2017-08-17 12:34:43 +02:00
0ed98ea9b9 Merge pull request #368 from jakub-wojciechowski/master
Remove moment.js dependencies
2017-08-16 10:17:53 -03:00
0b66144942 Merge pull request #374 from rstormsf/patch-1
Remove beta tag from truffle
2017-08-16 01:12:51 -03:00
b91a3eded3 Remove beta tag from truffle
truffle@beta uses old solc 0.4.11
truffle main branch uses most up to date 0.4.15
2017-08-15 14:55:37 -07:00
7c9c0f6538 Fix for mispelled words (#371) 2017-08-15 23:08:41 +02:00
0d6846a882 Remove moment.js dependencies - updates after review 2017-08-15 12:31:49 +02:00
84a68e0c25 Merge pull request #364 from frangio/remove-crowdsale-finish-minting
Remove token.finishMinting() from default finalization
2017-08-14 14:57:22 -03:00
e82fa4eae0 parallelize tests and coverage in travis 2017-08-14 13:37:53 -03:00
c79c6d76d8 unify test and coverage scripts 2017-08-14 13:37:11 -03:00
36452136f1 add test for finishMinting 2017-08-13 22:41:25 -03:00
17cfb0fc78 Remove moment.js from package dependencies 2017-08-14 00:36:01 +02:00
e86ac90853 Refactor and remove moment.js usages 2017-08-14 00:27:09 +02:00
99e0f5b5cb Refactor time manipulation in TokenTimelock tests 2017-08-14 00:21:57 +02:00
4fc6bb7977 remove token.finishMinting() from default finalization 2017-08-12 22:02:44 -03:00
6e66ba321e Merge pull request #363 from frangio/sync-yarn-npm-locks
Sync yarn.lock file with package-lock.json
2017-08-12 19:26:58 -03:00
2c2067ecc1 sync yarn.lock file with package-lock.json
1. deleted node_modules
2. ran `npm install`
3. deleted yarn.lock
4. ran `yarn import`
2017-08-12 18:57:32 -03:00
e6a7a978d1 Merge pull request #362 from cgewecke/bump-solidity-coverage
Upgrade solidity coverage to ^0.2.1
2017-08-12 18:42:55 -03:00
3e02f45f67 Upgrade solidity coverage to ^0.2.1 2017-08-12 14:20:14 -07:00
b972f43513 Merge pull request #345 from SylTi/master
Add Transfer event when token is minted
2017-08-11 14:47:43 -03:00
30d02b1c78 Merge pull request #357 from frangio/fix-hdwallet-dependency
Move truffle-hdwallet-provider to devDependencies
2017-08-11 13:13:11 -03:00
479d01101d move truffle-hdwallet-provider to devDependencies 2017-08-11 11:30:44 -03:00
2b079136fb Merge pull request #353 from jakub-wojciechowski/master
Change crowdsales to use timestamps instead of block numbers #350
2017-08-10 12:42:55 -03:00
46c5759b88 Introduce increaseTimeTo helper method. 2017-08-10 16:23:52 +02:00
7c883b6368 Duration helper and eliminated hardcoded periods 2017-08-10 13:13:49 +02:00
69daed7746 Merge pull request #341 from lsaether/master
Added contracts/token/BurnableToken.sol
2017-08-09 17:22:58 -03:00
0b9afefa93 Merge pull request #339 from abarmat/typo-1
Fix typo in SafeMath doc
2017-08-07 17:25:36 -03:00
52490b92bf Merge pull request #340 from abarmat/style-1
Add missing parentheses in modifier
2017-08-07 17:25:01 -03:00
2261039d52 Simplify advanceBlock in tests 2017-08-07 18:29:09 +02:00
24323d3ce3 MerkleTree util class hashes elements 2017-08-07 11:23:52 -04:00
c6e055689b Change crowdsales to use timestamps instead of block numbers #350 update example 2017-08-06 16:42:16 +02:00
2b5192b9ce Change crowdsales to use timestamps instead of block numbers #350 update derived crowdsales 2017-08-06 16:41:43 +02:00
77dfcb6e23 Change crowdsales to use timestamps instead of block numbers #350 2017-08-06 16:40:19 +02:00
4fe837704b Add Transfer event when token is minted to be fully ERC20 compliant &
tests
2017-08-05 00:14:01 +02:00
cf58330936 added tests for BurnableToken 2017-07-31 17:23:23 -07:00
287b873add Merge pull request #338 from jeremygrenier/master
Remove return values of pause() and unpause() of Pausable
2017-07-31 11:58:56 -03:00
115e7afe0b Merge pull request #342 from jakub-wojciechowski/master
Add complex crowdsale example #331
2017-07-31 11:42:38 -03:00
a9e1fcd623 Add complex crowdsale example #331 requested changes 2017-07-29 09:00:54 +01:00
04e0b2e5c2 Add complex crowdsale example #331 tests 2017-07-29 00:29:59 +01:00
2403508e1b Add complex crowdsale example #331 2017-07-29 00:29:17 +01:00
b414545b6e fixed typos XP 2017-07-28 16:11:27 -07:00
3296471bda Added contracts/token/BurnableToken.sol 2017-07-28 16:07:04 -07:00
eb5b6252bc Add missing parentheses in modifier 2017-07-28 20:59:11 +02:00
e5da857d4f Fix typos in SafeMath doc 2017-07-28 20:53:55 +02:00
09a8da5d6a Remove return values of pause() and unpause() of Pausable 2017-07-28 17:35:27 +02:00
863ad48a81 Check proof length multiple of 32. Use keccak256 instead of sha3 2017-07-28 10:38:32 -04:00
de0e6ba222 Merge pull request #333 from frangio/examples
Move examples to separate directory
2017-07-26 20:22:20 -03:00
91e5a925d9 Merge pull request #334 from OpenZeppelin/upgrade/truffle-3.4.6
Upgrade truffle to 3.4.6
2017-07-26 19:33:01 -03:00
5e7c168b25 Fix missing storage keyword warnings 2017-07-26 17:23:20 -03:00
6fccd202fe Fix invalid number of args for solidity function errors in tests 2017-07-26 17:20:28 -03:00
18e98fbba8 Upgrade version of Truffle to 3.4.6 2017-07-26 16:36:13 -03:00
a799d218fd add constant qualifier 2017-07-26 16:12:05 -03:00
9f0cbd3303 move example contract 2017-07-26 16:12:05 -03:00
93fb8f35a8 Merge pull request #328 from frangio/remove-multisig
Remove MultisigWallet in favor of ConsenSys/MultiSigWallet
2017-07-24 19:13:23 -03:00
2303fd51a3 Merge pull request #329 from frangio/fix-test-script-cleanup
Fix test script cleanup and portability
2017-07-24 19:06:08 -03:00
910fc4915e Merge pull request #330 from frangio/coveralls-notification
Remove coveralls token
2017-07-24 18:00:27 -03:00
002acb984e remove coveralls token from repository 2017-07-24 17:23:24 -03:00
bebe704688 use portable shebang line 2017-07-24 13:57:42 -03:00
9a006f3a68 add check to see if process is running
because when we interrupt the tests via ^C, the signal also kills the
background process
2017-07-24 13:57:34 -03:00
58e2e4d742 remove MultisigWallet in favor of ConsenSys/MultiSigWallet 2017-07-24 13:26:48 -03:00
60bc6a6da5 Merge pull request #327 from jakub-wojciechowski/master
fix testing error throwing
2017-07-22 22:17:32 -03:00
b3f60b9320 refactor testing error throwing 2017-07-22 21:40:01 +01:00
e9cf6dfb60 Merge pull request #323 from pooleja/fix/ownable_error
Fix/ownable error - Silent transferOwnership Failure
2017-07-22 15:57:45 -03:00
5e7847537a fix testing error throwing 2017-07-22 11:46:49 +01:00
64787b1ac5 Add semicolon to match coding standards 2017-07-21 23:07:50 -07:00
58fdb956b5 Add assert to prevent regression 2017-07-21 23:04:50 -07:00
4d91118dd9 Merge pull request #320 from cgewecke/coverage-badge
Minor coverage maintenance
2017-07-21 16:06:23 -03:00
ed872ca0a1 Minor coverage maintenance 2017-07-21 11:25:53 -07:00
1bb1d41beb Merge pull request #281 from rudygodoy/master
Tests refactoring and typo fixes
2017-07-21 11:57:13 -03:00
1db46aa5d5 Merge pull request #292 from jakub-wojciechowski/test/pausable
Test if unpause prevents events allowed in paused state
2017-07-21 11:39:42 -03:00
c991eaf916 Merge pull request #325 from frangio/refactor/test-script
Refactor test script
2017-07-21 11:13:40 -03:00
86a69fd6d6 refactor test script
- fix status code (script exited with success even with failing tests)
- clean up and explain things
2017-07-20 18:58:31 -03:00
6735a3ccd6 Renamed tAMOUNT to much friendly amount 2017-07-20 16:01:41 -05:00
6d565ef841 Fix auto-formatting 2017-07-20 10:58:16 -07:00
b2e36314cb Add requirement for address to not be 0 and throw error 2017-07-20 10:51:57 -07:00
6904f12032 Merge with upstream/master 2017-07-20 07:01:58 -05:00
c3a30e9be3 Merge pull request #318 from BrianGuo/master
changed instances of uint to uint256
2017-07-19 15:54:53 -03:00
93b953fb48 changed instances of uint to uint256; fixes issue #226 2017-07-19 09:59:46 -04:00
e2fdf09e9b v1.2.0 2017-07-18 15:07:10 -03:00
4f44427966 Added function helper, few changes on ECRecover lib 2017-07-18 11:31:30 -03:00
f8c0fab5d8 Fixed tests and few changes on contract comments 2017-07-18 11:31:30 -03:00
478d1b1a93 Removed safeRecover, using ecrecover method instead, recovering signature from entire hash 2017-07-18 11:31:30 -03:00
a68eaa4e2d Added NatSpec documentation on ECRecovery contract 2017-07-18 11:31:30 -03:00
68c2bcb9dd Removed .only on ECRecovery tests 2017-07-18 11:31:30 -03:00
635c04378d Removed ECRecovery mock contract, ECRecovery funcions are public constants 2017-07-18 11:31:30 -03:00
227c7aae0f added check to ret boolean on ECRecovery 2017-07-18 11:31:30 -03:00
641b751385 Fix ECRecovery contract indentation
Fix ident on github

Fix ident github

Fix ident on github
2017-07-18 11:31:30 -03:00
4201d50dcf ECRecovery library added with test and docs 2017-07-18 11:31:30 -03:00
b05fb9c200 Update ownable.rst
Change the name of the function in the docs to the actual name in the contract source To prevent misunderstandings.
2017-07-17 21:37:59 -03:00
4f34d41523 Fixing typo. 2017-07-17 21:37:32 -03:00
91fc295a42 Updated reference to Ownable contract. 2017-07-17 21:37:32 -03:00
67d3a759a7 leave weiAmount after PR comments 2017-07-17 21:36:09 -03:00
950b6a5e56 sanity check for RefundableCrowdsale: goal > 0 2017-07-17 21:36:09 -03:00
db40fd314a sanity check for CappedCrowdsale: cap > 0 2017-07-17 21:36:09 -03:00
6035bd522b simplify crowdsale weiRaised update 2017-07-17 21:36:09 -03:00
b8884687df fix off by one error in VestedToken 2017-07-17 21:34:38 -03:00
18581f138f converted if() throw convention to require()/assert()/revert() 2017-07-17 15:35:09 -03:00
f3867f8477 Merge pull request #315 from joeykrug/patch-1
Added Constant to SafeMath functions as they don't modify storage
2017-07-15 15:52:36 -03:00
353285e5d9 Added Constant to SafeMath functions as they don't modify storage 2017-07-15 11:37:35 -07:00
a56bcbf8fd Correctly call super.transferableTokens
Fix #307
2017-07-14 18:17:09 -03:00
81297fac88 Merge pull request #308 from frangio/fix/erc20
Make ERC20 and token contracts conform to standard
2017-07-13 17:28:50 -03:00
6331dd125d fix ERC20 to conform to standard 2017-07-13 12:05:45 -03:00
f8790c1ed7 Merge pull request #304 from cgewecke/fix-coveralls
Fix coverage
2017-07-10 23:24:45 -03:00
5afbdf00db Fix coverage 2017-07-10 15:45:12 -07:00
322a9598ab Merge pull request #289 from ezynda3/master
update according to changes in #288
2017-07-06 11:07:13 -03:00
ba86e8e095 Merge pull request #296 from frangio/fix/293-tokentimelock-claim
Add TokenTimelock#release function that anyone can call
2017-07-05 11:47:15 -03:00
5e423bc353 add release function, deprecate claim 2017-07-05 11:24:59 -03:00
6eac859781 Test if unpause prevents events allowed in paused state 2017-07-03 17:06:47 +01:00
f2c2c01f8e Merge branch 'master' of github.com:OpenZeppelin/zeppelin-solidity 2017-07-02 15:50:40 -07:00
7434b3d6d2 v1.1.0 2017-07-02 18:53:32 -03:00
63b5fc5971 Merge pull request #290 from frangio/fix/safemath-references
Fix references to SafeMath in crowdsale contracts
2017-07-02 18:50:29 -03:00
f507a0ea29 fix references to SafeMath in crowdsale contracts 2017-07-02 18:39:51 -03:00
c254d8703d update according to changes in #288 2017-07-02 14:33:15 -07:00
981ec2dbdc v1.1.0 2017-07-02 18:27:18 -03:00
d5a75362ec Merge pull request #288 from frangio/refactor/math
Move SafeMath and create Math library for assorted operations
2017-07-02 18:13:47 -03:00
e748c3ea36 Merge pull request #283 from OpenZeppelin/crowdsale
Add Crowdsale contracts
2017-07-02 17:59:19 -03:00
421ed4f8ab fix references to max and min functions 2017-07-02 17:56:34 -03:00
0b1f08043b change Math to a library instead of a contract 2017-07-02 17:56:10 -03:00
759f8de81f fix import directories 2017-07-02 17:52:44 -03:00
96b550b722 Merge pull request #287 from jakub-wojciechowski/test/day-limit
Added new test for a day passed scenario to the DayLimit contract
2017-07-02 17:37:28 -03:00
b961eea89d fix claimRefund precondition 2017-07-02 17:10:11 -03:00
d2dd6e40b6 added new test for a day passed scenario to the DayLimit contract 2017-07-02 21:06:58 +01:00
070bcbcdbd rename purchaseValid to validPurchase 2017-07-02 17:05:06 -03:00
46fe7ee76d guard against beneficiary == 0x0 2017-07-02 16:51:26 -03:00
ba383a6d20 refactor max and min out of SafeMath 2017-07-02 13:01:55 -03:00
a66f5f8f03 format SafeMath documentation as NatSpec 2017-07-02 13:00:23 -03:00
262b7dd7dd Merge pull request #285 from frangio/feature/token-timelock
Add a TokenTimelock contract
2017-06-30 23:14:24 -03:00
5d847ed4d9 tweak TokenTimelock documentation 2017-06-30 21:28:45 -03:00
b3ca0c73b3 add a TokenTimelock contract 2017-06-30 21:25:59 -03:00
d6a45ef14e Merge pull request #282 from jasonbellamy/fix/standard-contract-docs-typo
fix(token): typo in documentation
2017-06-30 18:31:53 -03:00
54d74b1c26 rename canBuy to purchaseValid 2017-06-30 17:54:26 -03:00
657c56c650 remove unecessary whitespace 2017-06-30 17:54:07 -03:00
50a903a62d use npm test script for travis 2017-06-30 17:40:34 -03:00
0791e6639a add extra arguments to test command for development testing 2017-06-30 15:52:11 -03:00
59e9609926 remove CrowdsaleToken
it is superseded by the new crowdsale contracts
2017-06-30 15:50:47 -03:00
fadb2cf47e add tests for crowdsale contracts 2017-06-30 15:50:47 -03:00
4d55d8fa8e give more balance to testrpc accounts
includes fix to MultisigWallet test because bigger balances result in
floating point errors (see #204)
2017-06-30 15:50:47 -03:00
e31abffcb6 fix(token): typo in documentation
Implemantation -> Implementation
2017-06-30 14:40:15 -04:00
cd47fbe953 Improve Crowdsale#rate documentation 2017-06-30 11:23:28 -03:00
42c6392533 fix(token): typo in documentation 2017-06-30 00:41:12 -04:00
3c9638b62e Refactoring to not DRY.
The latest test case is not affected since the aproval is for
accounts[1], which does the transaction, and it is independent of
the amount of tokens that accounts[0] might have.
2017-06-29 13:18:54 -05:00
60ef284a9a Typo in variable, using global tAMOUNT for the latest test case. 2017-06-29 13:13:53 -05:00
b40a01e97b Small refactoring to not DRY 2017-06-29 13:12:58 -05:00
34e3ce4ab4 Typo fix: avaible -> available 2017-06-29 12:44:14 -05:00
4d6b48f39e Typo fix. standart -> standard 2017-06-29 12:40:26 -05:00
de99e7bf34 Prevent DRY 2017-06-29 12:31:32 -05:00
3430c7a289 Merge pull request #280 from rstormsf/fix/revert_inheritance_order
change inheritance order for StandardToken and PausableToken
2017-06-29 10:40:43 -03:00
daf1784be4 change inheritance order for StandardToken and PausableToken 2017-06-28 22:15:51 -07:00
de92a02127 Add Crowdsale contracts 2017-06-27 18:34:04 -03:00
549590d105 Refactored to prevent DRY with beforeEach().
Refs# 259
2017-06-26 17:32:34 -05:00
82ca385725 Merge pull request #277 from frangio/fix-261
Remove all checks for short address attack
2017-06-26 15:32:56 -03:00
e33d9bb41b remove all checks for short address attack (fixes #261) 2017-06-26 15:11:54 -03:00
79b3a1b1a2 Merge pull request #273 from jooray/patch-1
Fix typo in StandardToken allowance documentation
2017-06-22 13:15:28 -03:00
c6a3c29eb4 Merge pull request #272 from rstormsf/Removal-of-install-script
Removes install script
2017-06-22 10:34:07 -03:00
dd34d8df0f Fix typo in StandardToken allowance documentation 2017-06-22 15:33:34 +02:00
80d052d43f Fixes #253 2017-06-21 17:34:43 -07:00
710f77dfe1 Merge pull request #269 from rstormsf/uint256
change uint to uint256
2017-06-20 12:23:52 -03:00
b1e504d6c6 change uint to uint256 2017-06-19 18:55:09 -07:00
7deaee04c8 Merge pull request #263 from DaveAppleton/master
assert is now built in
2017-06-17 16:36:56 -03:00
2020d56ba4 assert is now built in 2017-06-17 11:10:30 +08:00
a49fe53fa1 Merge pull request #258 from mbrix/master
fixed typo
2017-06-15 13:52:34 -03:00
bc3db5d4c1 Fix weird indent issue for inline assembly 2017-06-15 11:13:37 -04:00
30e202313d Fix indentation in MerkleProof.sol and remove mock contract 2017-06-15 11:10:37 -04:00
2e0bd06da2 Add tests, docs and MerkleTree helper 2017-06-15 11:07:22 -04:00
3c4d0d0a77 MerkleProof library and initial stubbed out tests 2017-06-14 16:34:46 -04:00
403e7336a9 fixed typo 2017-06-14 16:31:12 -04:00
fea2a8383c Merge pull request #256 from DavidKnott/refactor-mintable-token
Refactor MintableToken Contract
2017-06-14 16:12:23 -03:00
ffe464a43e Refactors the Mintable Token contract 2017-06-14 10:38:32 -06:00
3fbcb1b282 Merge pull request #250 from jdkanani/yarn-setup
Add yarn support and use it for Travis CI
2017-06-12 12:11:14 -03:00
28b2a0c881 Move npm to yarn 2017-06-11 12:50:26 +05:30
7b9c1429d9 v1.0.7 2017-06-09 19:31:09 -03:00
d53ddd4a95 Merge pull request #242 from DavidKnott/upgrade-truffle-and-solidity
Upgrade to Truffle version 3.2.2 and Solidity version 0.4.11
2017-06-07 15:04:57 -03:00
6ede3d9001 Upgrade to Truffle version 3.2.2 and Solidity version 0.4.11 2017-06-06 21:41:54 -06:00
c3cb0dcf80 Merge pull request #238 from DaveAppleton/master
remove redundant return
2017-06-06 11:02:46 -03:00
f214dccab9 removed redundant returns 2017-06-06 17:10:55 +08:00
c0cce27703 remove redundant return 2017-06-02 00:27:16 +08:00
2eded7a337 Merge pull request #237 from maraoz/coveralls
Add coveralls
2017-05-31 20:30:50 -03:00
41a6f1cd84 add coveralls 2017-05-31 17:15:50 -03:00
e1eed257f1 v1.0.6 2017-05-29 18:29:48 -03:00
2bcb54b3cb Merge pull request #231 from maraoz/fix-vested-token
Implement VestedToken bug mitigation #3
2017-05-29 18:27:44 -03:00
7100e30bed Implement VestedToken bug mitigation #3 2017-05-29 17:52:19 -03:00
7f6921e787 Merge pull request #222 from aragon/refactor
[VestedToken] Add revokability and burnablity options and general refactor and optimizations
2017-05-29 17:17:54 -03:00
73ec224c93 Merge pull request #2 from maraoz/aragon-refactor
rebase to master
2017-05-29 22:05:05 +02:00
a62621eb59 merge @izqui PR with new docs changes 2017-05-29 16:19:03 -03:00
84843d42da Merge pull request #225 from DavidKnott/fix-natspec-typos
Edit natspec documentation typos
2017-05-25 18:44:01 -03:00
d08185fc3e Edit natspec documentation typos 2017-05-26 00:29:15 +03:00
efe09575e3 Merge pull request #210 from maurelian/master
Add natspec comments to contracts
2017-05-24 18:33:28 -03:00
c4796bb918 Fix comments again 2017-05-24 17:27:05 -04:00
111f13f0ce Add doc comments to multisig wallet 2017-05-24 16:51:05 -04:00
d357cf3a2e Minor changes to doc comments for token and other contracts 2017-05-24 16:51:01 -04:00
83f2849446 Minor edits to doc commenst in lifecycle, ownership, payment contracts. 2017-05-24 16:49:43 -04:00
d85be4a866 Add natspec to vestedToken.sol 2017-05-24 16:47:25 -04:00
f6f91298f0 Add natspec to all remaing contracts, except for vestedToken.sol 2017-05-24 16:47:21 -04:00
1547922b61 Added natspec to the remaining ownership contracts and payment contracts 2017-05-24 16:45:45 -04:00
602c18b394 Applied change regarding the styling 2017-05-24 16:45:41 -04:00
b5d4120adb Added natsec for all lifecycle contracts + bounty.sol, DayLimit.sol and LimitBalance.sol 2017-05-24 16:43:14 -04:00
e851938199 Add natspec comments to four ownership contracts 2017-05-24 16:35:09 -04:00
48a2e11dfe merge 2017-05-22 18:08:03 -04:00
22f60eace0 Use libraries syntax sugar for revoking grants logic 2017-05-22 18:06:57 -04:00
b788f33c6a Merge pull request #218 from cgewecke/coverage
Add coverage
2017-05-21 23:40:18 -03:00
592548715f Add solidity-coverage 2017-05-21 19:19:50 -07:00
0983f0065d Merge pull request #223 from aragon/safe-math-div
[SafeMath] Remove unnecessary checks from safeDiv
2017-05-21 23:06:42 -03:00
c4f78a5dd5 Remove unnecessary checks from safeDiv 2017-05-21 16:41:18 -04:00
e032b86231 Merge with Zeppelin master 2017-05-21 16:14:06 -04:00
a6a2ee2bf1 Merge with master 2017-05-21 16:08:47 -04:00
929367f0ab Reorg code 2017-05-21 12:10:04 +02:00
5a6340395f Fix grant id parameter in NewTokenGrant event 2017-05-21 11:22:30 +02:00
f812433706 Small refactor and documentation 2017-05-21 11:18:24 +02:00
713b472253 Add tests for non-revokable and revokable/burnable cases 2017-05-21 11:17:24 +02:00
a1d2b673c6 Fix tests for revokable/non burn vesting calendar 2017-05-21 10:44:03 +02:00
5b2f0aa93d Implement revokable and burnsOnRevoke options 2017-05-21 10:38:56 +02:00
ecbfcbb302 Merge pull request #221 from TokenMarketNet/feat/transfer-from-mitigation
Protect transferFrom() against short hand attack.
2017-05-18 12:43:51 -03:00
964185dec3 Protect transferFrom against short hand attack. 2017-05-18 00:38:41 +03:00
5c491987f3 Merge pull request #219 from TokenMarketNet/feat/approve-mitigation
approve() race condition mitigation
2017-05-17 13:26:19 -06:00
e1cf602487 Fix variable naming. 2017-05-17 01:41:43 +03:00
a3446507ec Add fix for the approve() mitigation. 2017-05-17 01:33:13 +03:00
ff61c7d92d Merge pull request #212 from misteraverin/feature/destructible
Add destroy function, allowing send funds to recepient.
2017-05-15 07:19:45 -06:00
726593c0a2 Merge pull request #216 from maraoz/ethpm-npm
Revert to usig npm as preferred installation method
2017-05-12 09:12:24 -06:00
7826fddba7 revert to usig npm as preferred installation method 2017-05-12 12:10:28 -03:00
38a450460d Merge pull request #214 from maraoz/audit-report
Add external audit report
2017-05-11 13:17:53 -03:00
de7751aae2 Add external audit 2017-05-11 13:08:23 -03:00
cf7bc06856 Switch function name to destroyAndSend 2017-05-09 23:20:44 +03:00
7ac697be2c v1.0.5 2017-05-09 15:13:45 -03:00
4de772f5ed add destroy function, allowing send funds to recepient 2017-05-08 22:50:43 +03:00
f7a7fc3b06 Merge pull request #206 from DavidKnott/create-pausable-token
Create and test PausableToken Contract
2017-05-03 15:32:33 -03:00
b4b6029f66 Create and test PausableToken Contract 2017-04-29 01:08:14 +01:00
071040f3eb Merge pull request #203 from ORBAT/fix/bounty-claim-fail-test
Await event handling result in Bounty test
2017-04-24 11:06:38 -03:00
cd78c20e0e await event handling result in Bounty test. Fixes #202 2017-04-21 20:08:17 +03:00
453a198250 Merge pull request #184 from maraoz/safemath
Make SafeMath a library
2017-04-20 12:40:15 -03:00
7592122e4d fix indentation 2017-04-19 18:34:53 -03:00
609869f087 change safe* to * 2017-04-19 16:19:22 -03:00
4fad1505c7 Make SafeMath a library 2017-04-19 15:36:49 -03:00
5881429952 Merge pull request #195 from OpenZeppelin/maraoz-patch-1
Update README with new slack url
2017-04-19 13:49:29 -03:00
526ed43d61 Update README with new slack url 2017-04-19 13:49:09 -03:00
ab9591ba80 Merge pull request #193 from AugustoL/master
Added totalPayments uint on PullPayments contract
2017-04-18 11:42:48 -03:00
a8bcb0fcfe Added totalPayments uint on PullPayments contract 2017-04-14 14:30:31 -03:00
b420316783 Merge pull request #192 from tatiesmars/patch-1
Add MintFinished event to MintableToken
2017-04-13 16:18:07 -03:00
37c6782f95 Add MintFinished event to MintableToken #191 2017-04-13 14:23:41 +08:00
70a4395a97 Merge pull request #190 from lastperson/patch-1
Remove excessive condition from SafeMath.safeAdd()
2017-04-12 19:11:55 -03:00
31c05c4c7d Remove excessive condition from SafeMath.safeAdd()
There is no situation when `c>=a` will be `true` while `c>=b` will be `false`.
2017-04-12 15:22:52 +08:00
22018fd374 Merge pull request #188 from jdetychey/patch-3
fix for short address attack
2017-04-11 17:02:24 -03:00
d1f63f5c7e Merge pull request #185 from DavidKnott/create-token-with-owner-contract
Create and test MintableToken contract
2017-04-11 13:01:01 -03:00
5d75264f0f Fix for bigger payloads
as suggested by izqui in case a function calls transfer under the hood
2017-04-11 17:25:03 +02:00
a605f66972 Create and test MintableToken contract 2017-04-07 14:51:33 -06:00
0328250554 Merge pull request #187 from DavidKnott/change-killable-contract-to-destructible
Change killable to destructible and kill to destroy
2017-04-07 15:16:06 -03:00
70b5ffd928 Change killable to destructible and kill to destroy 2017-04-07 11:34:35 -06:00
d9b9ed227b fix for short address attack
as suggested by /u/izqui9 here https://www.reddit.com/r/ethereum/comments/63s917/worrysome_bug_exploit_with_erc20_token/dfwmhc3/
Attack description: 
https://blog.golemproject.net/how-to-find-10m-by-just-reading-blockchain-6ae9d39fcd95
2017-04-07 11:30:18 +02:00
14274f8677 Merge pull request #169 from maraoz/audit
Follow security audit recommendations
2017-04-05 19:04:11 -03:00
af604379d3 rebase conflict fixes 2017-04-05 18:30:14 -03:00
7d83a08658 8.2.3 removed ownable 2017-04-05 18:27:34 -03:00
2ccbfea8c5 8.1.2 add comment clarifying Migrations 2017-04-05 18:27:34 -03:00
fad287007b 7.2 add preconditions to Shareable contructor 2017-04-05 18:27:34 -03:00
cd9f820b85 fix syntax error 2017-04-05 18:27:34 -03:00
582166d378 7.1 pull payment safe math 2017-04-05 18:27:34 -03:00
ab9eecb104 6.1 fix stuck Ether in Crowdsale contract 2017-04-05 18:27:34 -03:00
52120a8c42 5.3 always throw on error 2017-04-05 18:27:34 -03:00
a1aa74f96d 5.2 all contracts now solidity ^0.4.8 2017-04-05 18:25:14 -03:00
6ae7ac97f6 Merge pull request #181 from roderik/patch-1
Shareable is not used in this contract
2017-04-05 17:25:28 -03:00
ba6c036628 Merge pull request #183 from AragonOne/fix-vesting
Fix vesting calculation logic
2017-04-05 12:54:23 -03:00
7a2fda9076 Improve VestedToken tests 2017-04-05 13:20:18 +02:00
41d2fde952 Fix vesting calculation logic 2017-04-05 13:13:17 +02:00
f0e7396619 Shareable is not used in this contract 2017-04-05 08:33:30 +02:00
6139500e97 Merge pull request #180 from frangio/fix-179-rename-transferable
Rename `TransferableToken` to `LimitedTransferToken`
2017-04-03 23:28:09 -03:00
0b88944b38 fix a few typos 2017-04-03 22:06:41 -03:00
61e33197b2 rename TransferableToken to LimitedTransferToken
fixes #179
2017-04-03 22:04:07 -03:00
025e7db765 Merge pull request #178 from frangio/fix-solidity-renamed-methods
Change sha3 and suicide methods to keccak256 and selfdestruct respectively
2017-04-03 12:03:16 -03:00
6f311e72b3 change sha3 and suicide methods to keccak256 and selfdestruct
see ethereum/solidity#1476
2017-04-03 11:31:56 -03:00
a344d42a00 Merge pull request #170 from Recmo/feature/no-owner
Prevent contracts from owning Ether, Tokens and other contracts.
2017-03-31 16:51:18 -03:00
f2159be68d Merge pull request #176 from frangio/shareable-owners-type
Change type of `owners` from uint[] to address[]
2017-03-31 13:33:09 -03:00
7f7238378c change type of owners from uint[] to address[]
fixes #175
2017-03-31 13:14:59 -03:00
1d2b989e8e Fix typo in comment 2017-03-31 09:39:29 +01:00
bc0f9b0ea5 Merge pull request #174 from demibrener/readme
Add Wings to collaborating organizations
2017-03-29 18:15:13 -03:00
a885dabc81 added Wings 2017-03-29 18:04:13 -03:00
6673da46b1 Merge pull request #173 from demibrener/readme
Name consistency: OpenZeppelin
2017-03-29 18:01:23 -03:00
2e9587477c Merge pull request #171 from Recmo/feature/reentrancy-guard
Add ReentrancyGuard
2017-03-28 15:10:30 -03:00
967ee13565 OpenZeppelin 2017-03-27 17:21:29 -03:00
a2bd1bb7f6 Add ReentrancyGuard 2017-03-24 11:01:06 +00:00
ac3b3652c3 Add NoOwner 2017-03-23 15:48:22 +00:00
166a1070e5 Add HasNoContracts 2017-03-23 15:43:52 +00:00
94d3c447b7 Add HasNoTokens 2017-03-23 15:22:48 +00:00
9ff82aecef Remove non-compiling payable default 2017-03-23 12:54:42 +00:00
d1af3ef1b3 Add HasNoEther 2017-03-23 12:23:27 +00:00
ffce7e3b08 Merge pull request #166 from AragonOne/transaferable
Add comments for Transferable Token
2017-03-20 15:43:56 -03:00
f896790ca3 Merge pull request #167 from maraoz/fix-travis
Fix travis build
2017-03-20 15:25:59 -03:00
960500a078 try to fix travis 2 2017-03-20 15:19:14 -03:00
ce25e2db98 try to fix travis 1 2017-03-20 11:58:56 -03:00
463ae97117 Merge pull request #160 from Recmo/feature/token-killable
Add TokenKillable
2017-03-20 11:27:19 -03:00
350ab09855 Add comments for TransferableToken 2017-03-20 10:16:48 +01:00
312220fe63 Merge pull request #162 from AragonOne/transaferable
Decouple transferable logic from VestedToken
2017-03-15 16:09:13 -03:00
72029b6847 Decouple transferable logic from VestedToken 2017-03-14 20:22:18 +01:00
525a5522b0 Add TokenKillable 2017-03-14 14:09:59 +00:00
9c5975a706 Merge pull request #158 from maraoz/update-readme
update README on new code distribution strategy (ethpm)
2017-03-09 18:13:27 -03:00
9006f89f9f update README on new code distribution 2017-03-09 18:02:41 -03:00
15169b245b v1.0.4 2017-03-09 15:04:14 -03:00
cc222c02a9 Merge pull request #156 from maraoz/ethpm
Add ethpm support
2017-03-09 15:00:09 -03:00
29ab824e5c revert TokenGrant instantiation to old style 2017-03-09 14:37:02 -03:00
8d828bc789 fix ethpm.json 2017-03-07 16:57:51 -03:00
f038cdc9c9 fix ethpm.json 2017-03-07 16:57:12 -03:00
72d31c2471 attempt to publish to ethpm 2017-03-07 16:56:13 -03:00
b31c92c27c ethpm integration 2017-03-07 16:17:48 -03:00
eb2cb5dd06 v1.0.3 2017-03-06 11:14:18 -03:00
52d0df7961 Merge pull request #155 from AragonOne/vested-transfer-from
[VestedToken] Check if tokens can be transferred on transferFrom
2017-03-06 11:11:29 -03:00
12aadbed51 Move check to transferFrom and add tests 2017-03-06 11:09:01 +01:00
23703280ee Check if tokens are transaferable on approve 2017-03-06 11:02:57 +01:00
5e50090da0 Merge pull request #151 from AragonOne/clarity
Add clarifying comment to standard token transfer from function
2017-03-01 17:16:15 -03:00
b9257a1092 Add clarifying comment to standard token transfer from function 2017-02-27 16:32:42 +01:00
8cd58303f9 v1.0.2 2017-02-23 12:56:07 -03:00
b134645637 Merge pull request #150 from maraoz/solidty-version
solidity version 0.4.8
2017-02-23 09:12:54 -03:00
d41cc437b3 Merge pull request #149 from JGcarv/feature/contactable
Added a contactable contract
2017-02-22 18:21:39 -03:00
26335e669e Added a contactable contract and some tests for it 2017-02-22 16:28:01 -03:00
52b66c744f solidity version 0.4.8 2017-02-21 19:29:03 -03:00
65c9711754 Merge pull request #147 from fabioberger/refactor/modifiers
Update modifiers to throw and update corresponding tests
2017-02-21 16:58:06 -03:00
3d6988cf90 Update modifiers so that they fail "loudly" by throwing errors rather then silently no-oping. Updated tests to remain compatible with these changes 2017-02-21 00:05:59 +01:00
c10a2cf15c Merge pull request #146 from maraoz/refactor
Refactor in preparation for audit
2017-02-17 19:30:07 -03:00
44082c029f fix travis tests 4 2017-02-17 19:23:56 -03:00
8ba0f008df fix travis tests 3 2017-02-17 19:17:42 -03:00
fcabd9957e fix travis tests 2 2017-02-17 19:02:44 -03:00
9f12e870a9 fix travis tests 2017-02-17 18:47:56 -03:00
d24a2ed9a8 fix compiler error 2017-02-17 18:32:24 -03:00
b1cb7b5975 implement solium recommendations 2017-02-17 18:31:16 -03:00
9ab997d788 fix travis test runner 2017-02-17 18:04:56 -03:00
90654cb2c9 add .jshintrc 2017-02-17 18:04:02 -03:00
9bd51db2b2 refactor tests for truffle 3 2017-02-17 18:03:52 -03:00
7e7193ae61 truffle 2=>3 2017-02-15 12:14:50 -03:00
a69333e2b8 migrate to truffle 3 2017-02-14 17:57:37 -03:00
1f35727442 Merge pull request #144 from demibrener/readme
Aragon new collaborating organization
2017-02-14 12:37:45 -03:00
cbc18e6dcc Aragon new collaborating organization 2017-02-14 12:07:11 -03:00
60b48b0235 Solium 2017-02-13 13:26:56 -03:00
f4624837a3 Merge pull request #140 from AragonOne/vesting
Vested Token implementation (Standard Token with vesting calendar)
2017-02-13 12:43:54 -03:00
0a5af4b8ac Change operations order for rounding. Make tests use blocktime as reference time rather than date. 2017-02-13 11:35:32 +01:00
74dfd3511f Merge pull request #1 from maraoz/vesting
Vesting test fixing help
2017-02-13 10:08:43 +01:00
ee56abcc8a remove console.logs from timer 2017-02-10 18:35:05 -03:00
b67f60929c make VestedToken test deterministic 2017-02-10 18:32:58 -03:00
0b71dcded2 Rename GrantableToken to VestedToken 2017-02-10 16:20:23 +01:00
f305382ef4 Remove grantTokens without vesting function 2017-02-10 16:18:36 +01:00
917b129517 Add safeDiv and min/max functions to SafeMath 2017-02-10 16:17:02 +01:00
abc646a95c lastTokenIsTransferableDate rename 2017-02-10 16:04:58 +01:00
1697518da8 Make vested stock calculation more testable 2017-02-10 15:28:20 +01:00
93e7984c61 Transferrable is now transferrable 2017-02-10 14:59:19 +01:00
8d9e12eda3 Add GrantableToken tests 2017-02-09 13:23:12 +01:00
fb0a96332c GrantableTokenMock 2017-02-08 15:27:39 +01:00
ba7a0f7649 Merge branch 'master' of https://github.com/OpenZeppelin/zeppelin-solidity into vesting 2017-02-08 15:26:15 +01:00
a72de719c9 Merge pull request #139 from eordano/patch-1
BasicToken.sol: Remove useless check
2017-02-08 11:13:38 -03:00
ec6e728c0f Grantable Token first version 2017-02-08 12:31:20 +01:00
70fbc7fe27 BasicToken.sol: Remove useless check
The condition this commit removes is already implemented by the call to `safeSub`
2017-02-07 19:45:32 -05:00
ced4e2da3f Merge pull request #137 from JGcarv/chore/rename-to-pausable
Renamed files and replaced occurencies of 'Stoppable' to 'Pausable'
2017-02-06 16:34:54 -03:00
ae73f1a564 Renamed files and replaced occurencies of 'Stoppable' to 'Pausable' 2017-01-30 23:30:43 -02:00
26127ee36a Merge pull request #136 from AragonOne/master
Make test cases that use assertJump fail if they dont fail
2017-01-23 15:48:38 -03:00
2f0471fff2 Make test cases that use assertJump fail if they dont fail 2017-01-23 19:18:41 +01:00
ad833fb40d Merge pull request #132 from OpenZeppelin/refactor
Refactor folders in preparation for external audit
2017-01-17 13:02:16 -03:00
a544f1517c Merge pull request #133 from jtakalai/patch-1
Fix typos
2017-01-17 11:24:17 -03:00
67ad6abdaa Fix typos
On unrelated note, why on earth check like in safeAdd? Is it actually an overflow check?
2017-01-17 12:29:54 +02:00
0dfb27ff5f fix tests 2017-01-16 17:42:26 -03:00
ca8f2f2362 rearrange folders 2017-01-16 17:23:28 -03:00
2de7fec6dc Merge pull request #127 from OpenZeppelin/contributing
Add tag comment on CONTRIBUTING.md
2017-01-09 16:27:56 -03:00
342e7bf9ff Add tag comment on CONTRIBUTING.md
Fixes #116
2017-01-09 16:27:32 -03:00
ac6f9288a8 v1.0.1 2017-01-05 15:36:20 -03:00
d54e56f970 Merge pull request #78 from AugustoL/master
DelayedClaimable contract extension of Claimable fix #64
2016-12-30 12:04:05 -03:00
d974924045 Added claimAfterBlock variable and tests changes to support changes 2016-12-29 16:12:32 -03:00
e310e6728b Merge remote-tracking branch 'OpenZeppelin/master' 2016-12-29 15:54:19 -03:00
74adaeedf2 Merge pull request #119 from adklempner/refactorDayLimit
Decouple Shareable from DayLimit
2016-12-27 13:12:51 -03:00
a5602e7e7b Make resetSpentToday and setDailyLimit internal functions 2016-12-26 13:59:21 -08:00
2a75a2c9f4 Merge pull request #102 from adklempner/test/MultisigWallet
Create tests for MultisigWallet
2016-12-26 15:25:40 -03:00
6fa9e048da Merge pull request #123 from demibrener/readme
fix link
2016-12-23 14:34:51 -03:00
c21006e6d3 fix link 2016-12-23 14:29:17 -03:00
aa438fa053 Merge pull request #122 from demibrener/readme
add introductory guide to smart contracts
2016-12-23 14:26:04 -03:00
1529e19b09 introductory guide to smart contracts 2016-12-23 14:19:20 -03:00
813c1ff0cd Add payable to MultisigWalletMock() 2016-12-22 18:34:05 -08:00
8aa06bda38 Create tests for MultisigWallet 2016-12-22 18:34:05 -08:00
36fa2a72cf Decouple Shareable from DayLimit 2016-12-21 16:43:39 -08:00
11cf9f8752 Merge pull request #118 from mediachain/master
Add payable modifier to bid functions in examples
2016-12-21 16:51:40 -03:00
9c81dd29bb Fix example contracts 2016-12-21 14:26:32 -05:00
bb22cd62ac Merge pull request #100 from adklempner/shareable-test
Create tests for Shareable
2016-12-20 18:22:23 -03:00
e5eaa919b1 Make isOwner() const. Add necessary toString() calls in tests. 2016-12-20 13:02:24 -08:00
ba37d91878 Merge pull request #101 from adklempner/test/DayLimit
Create tests for DayLimit
2016-12-20 11:26:13 -03:00
e8459148a8 Remove unnecessary toString calls 2016-12-19 21:52:37 -08:00
f292643543 DelayedClaimable tests changed to work with rename of transfer() to transferOwnership() 2016-12-19 19:15:22 -03:00
80cc1808fc Merge remote-tracking branch 'OpenZeppelin/master' 2016-12-19 19:11:31 -03:00
d38941062b Merge pull request #114 from maraoz/2-lines
add 2 lines between top level definitions
2016-12-19 18:10:27 -03:00
f79ad4e2f6 add 2 lines between top level definitions 2016-12-19 17:43:02 -03:00
5567e73730 Merge pull request #113 from demibrener/documentation
update readme
2016-12-19 16:36:02 -03:00
2ddfb80a5e update readme 2016-12-19 16:29:02 -03:00
6a64d98a34 Merge pull request #112 from demibrener/documentation
Documentation
2016-12-19 14:32:58 -03:00
b1b66ce165 remove DS_Store 2016-12-19 14:29:48 -03:00
e6c50b3318 mend 2016-12-19 14:02:39 -03:00
260edd8702 Merge pull request #110 from FundRequest/master
resolve conflict between Ownable and ERC20 token.
2016-12-19 13:56:52 -03:00
920e3ec940 improve docs 2016-12-19 12:59:36 -03:00
2299cd1c39 remove unneeded files 2016-12-19 12:10:00 -03:00
31a01ebde1 developer resources update 2016-12-19 11:56:34 -03:00
ec07dce76f writing docs 2016-12-19 11:56:34 -03:00
8ba40d066f building docs 2016-12-19 11:56:34 -03:00
ed6df57f88 updated documentation for claimable and ownable interfaces 2016-12-16 10:15:08 +01:00
02f7f4c49d Fix invalid character on Claimable 2016-12-15 21:21:54 -03:00
77e732218e Also change claimable to avoid conflicts with ERC20 tokens 2016-12-15 15:59:25 +01:00
41fdd5d4c6 fixes gh-109: resolve conflict between Ownable and ERC20 token. 2016-12-15 15:32:08 +01:00
e859d53b6c Merge pull request #106 from FundRequest/master
fixes gh-99 PullPaymentMock needed a payable constructor
2016-12-13 16:35:49 +02:00
9d56414b75 fixed the code 2016-12-13 12:00:48 +01:00
fe184fdbdf Merge branch 'master' of https://github.com/FundRequest/zeppelin-solidity 2016-12-13 11:59:59 +01:00
c15fa95bea fixes gh-99 PullPaymentMock needed a payable constructor 2016-12-13 11:59:52 +01:00
0e58f7b992 fixes gh-99 PullPaymentMock needed a payable constructor 2016-12-13 11:53:31 +01:00
423cec41e3 claimBefore modifier removed on DelayedClaimable contract 2016-12-07 18:32:42 -03:00
c390e94da6 Create tests for DayLimit 2016-12-06 11:45:02 -08:00
0ec09f4131 Create tests for Shareable 2016-12-06 11:33:39 -08:00
ab93a8e3e8 Merge pull request #97 from sogoiii/async_await_tests
issue #57: Async await tests
2016-12-03 04:27:32 +02:00
c7eb6736ee DelayedClaimable contract with test added
Renamed DelayedClaimable function and modifier
2016-12-02 18:48:53 -03:00
42ccbb2276 Sync with v1.0.0 of zeppelin-solidity 2016-12-02 17:46:42 -03:00
38545eb648 fix: spelling in a test 2016-12-01 20:20:44 -08:00
eb41a81faa fix: made code cleaner. added helper. removed done from most tests. 2016-12-01 08:42:05 -08:00
688106e9c3 fix: made all the tests consistent. now with done. 2016-11-30 13:24:02 -08:00
f2142545c7 modified test to use async await pattern. 2016-11-27 12:09:48 -08:00
c920c40507 fix Build badge 2016-11-24 14:38:39 -08:00
475cb5dc1f Renamed DelayedClaimable function and modifier 2016-11-19 12:13:09 -03:00
85a4013f49 Using modifier to check block on delayedClaimable, tests fixed 2016-11-18 20:32:22 -03:00
0aa4d02044 DelayedClaimable contract with test added 2016-11-16 19:49:57 -03:00
363 changed files with 56198 additions and 2383 deletions

84
.circleci/config.yml Normal file
View File

@ -0,0 +1,84 @@
version: 2
# 2.1 does not yet support local run
# unless with workaround. For simplicity just use it.
# https://github.com/CircleCI-Public/circleci-cli/issues/79
aliases:
- &defaults
docker:
- image: circleci/node:10
- &cache_key_node_modules
key: v1-node_modules-{{ checksum "package-lock.json" }}
jobs:
dependencies:
<<: *defaults
steps:
- checkout
- restore_cache:
<<: *cache_key_node_modules
- run:
name: Install npm dependencies and prepare
command: |
if [ ! -d node_modules ]; then
npm ci
else
npm run prepare
fi
- persist_to_workspace:
root: .
paths:
- node_modules
- build
- save_cache:
paths:
- node_modules
<<: *cache_key_node_modules
lint:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Linter
command: npm run lint
test:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Unit tests
command: npm run test
coverage:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Unit tests with coverage report
command: npm run coverage
# TODO(xinbenlv, #1839): run SOLC_NIGHTLY to be run but allow it to fail.
workflows:
version: 2
everything:
jobs:
- dependencies
- lint:
requires:
- dependencies
- test:
requires:
- dependencies
- coverage:
requires:
- dependencies

3
.codecov.yml Normal file
View File

@ -0,0 +1,3 @@
comment: off
coverage:
range: "100...100"

7
.dependabot/config.yml Normal file
View File

@ -0,0 +1,7 @@
version: 1
update_configs:
- package_manager: "javascript"
directory: "/"
update_schedule: "weekly"
version_requirement_updates: "increase_versions"

17
.editorconfig Normal file
View File

@ -0,0 +1,17 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.sol]
indent_size = 4
[*.js]
indent_size = 2

62
.eslintrc Normal file
View File

@ -0,0 +1,62 @@
{
"extends" : [
"standard",
"plugin:promise/recommended",
],
"plugins": [
"mocha-no-only",
"promise",
],
"env": {
"browser" : true,
"node" : true,
"mocha" : true,
"jest" : true,
},
"globals" : {
"artifacts": false,
"contract": false,
"assert": false,
"web3": false,
},
"rules": {
// Strict mode
"strict": ["error", "global"],
// Code style
"array-bracket-spacing": ["off"],
"camelcase": ["error", {"properties": "always"}],
"comma-dangle": ["error", "always-multiline"],
"comma-spacing": ["error", {"before": false, "after": true}],
"dot-notation": ["error", {"allowKeywords": true, "allowPattern": ""}],
"eol-last": ["error", "always"],
"eqeqeq": ["error", "smart"],
"generator-star-spacing": ["error", "before"],
"indent": ["error", 2],
"linebreak-style": ["error", "unix"],
"max-len": ["error", 120, 2],
"no-debugger": "off",
"no-dupe-args": "error",
"no-dupe-keys": "error",
"no-mixed-spaces-and-tabs": ["error", "smart-tabs"],
"no-redeclare": ["error", {"builtinGlobals": true}],
"no-trailing-spaces": ["error", { "skipBlankLines": false }],
"no-undef": "error",
"no-use-before-define": "off",
"no-var": "error",
"object-curly-spacing": ["error", "always"],
"prefer-const": "error",
"quotes": ["error", "single"],
"semi": ["error", "always"],
"space-before-function-paren": ["error", "always"],
"mocha-no-only/mocha-no-only": ["error"],
"promise/always-return": "off",
"promise/avoid-new": "off",
},
"parserOptions": {
"ecmaVersion": 2018
}
}

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.sol linguist-language=Solidity

21
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,21 @@
---
name: Bug report
about: Report a bug in OpenZeppelin Contracts
---
<!-- Briefly describe the issue you're experiencing. Tell us what you were trying to do and what happened instead. -->
<!-- Remember, this is not a place to ask for help debugging code. For that, we welcome you in the OpenZeppelin Community Forum: https://forum.openzeppelin.com/. -->
**💻 Environment**
<!-- Tell us what version of OpenZeppelin Contracts you're using, and how you're using it: Truffle, Remix, etc. -->
**📝 Details**
<!-- Describe the problem you have been experiencing in more detail. Include as much information as you think is relevant. Keep in mind that transactions can fail for many reasons; context is key here. -->
**🔢 Code to reproduce bug**
<!-- We will be able to better help if you provide a minimal example that triggers the bug. -->

View File

@ -0,0 +1,14 @@
---
name: Feature request
about: Suggest an idea for OpenZeppelin Contracts
---
**🧐 Motivation**
<!-- Is your feature request related to a specific problem? Is it just a crazy idea? Tell us about it! -->
**📝 Details**
<!-- Please describe your feature request in detail. -->
<!-- Make sure that you have reviewed the OpenZeppelin Contributor Guidelines. -->
<!-- https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/CONTRIBUTING.md -->

22
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,22 @@
<!-- 0. 🎉 Thank you for submitting a PR! -->
<!-- 1. Does this close any open issues? Please list them below. -->
<!-- Keep in mind that new features have a better chance of being merged fast if
they were first discussed and designed with the maintainers. If there is no
corresponding issue, please consider opening one for discussion first! -->
Fixes #
<!-- 2. Describe the changes introduced in this pull request. -->
<!-- Include any context necessary for understanding the PR's purpose. -->
<!-- 3. Before submitting, please make sure that you have:
- reviewed the OpenZeppelin Contributor Guidelines
(https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/CONTRIBUTING.md),
- added tests where applicable to test new functionality,
- made sure that your contracts are well-documented,
- run the Solidity linter (`npm run lint:sol`) and fixed any issues,
- run the JS linter and fixed any issues (`npm run lint:fix`), and
- updated the changelog, if applicable.
-->

67
.github/stale.yml vendored Normal file
View File

@ -0,0 +1,67 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 15
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 15
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- on hold
- meta
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: false
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: false
# Set to true to ignore issues with an assignee (defaults to false)
exemptAssignees: false
# Label to use when marking as stale
staleLabel: stale
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
Hi all!
This Pull Request has not had any recent activity, is it still relevant? If so, what is blocking it?
Is there anything we can do to help move it forward?
Thanks!
# Comment to post when removing the stale label.
# unmarkComment: >
# Your comment here.
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
Hi folks!
This Pull Request is being closed as there was no response to the previous prompt.
However, please leave a comment whenever you're ready to resume, so it can be reopened.
Thanks again!
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Limit to only `issues` or `pulls`
only: pulls
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
# pulls:
# daysUntilStale: 30
# markComment: >
# This pull request has been automatically marked as stale because it has not had
# recent activity. It will be closed if no further activity occurs. Thank you
# for your contributions.
# issues:
# exemptLabels:
# - confirmed

50
.gitignore vendored
View File

@ -1,4 +1,52 @@
*.swp
*.swo
node_modules/
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
allFiredEvents
scTopics
# Coverage directory used by tools like istanbul
coverage
coverage.json
coverageEnv
# node-waf configuration
.lock-wscript
# Dependency directory
node_modules
# Debug log from npm
npm-debug.log
# local env variables
.env
# truffle build directory
build/
# macOS
.DS_Store
# truffle
.node-xmlhttprequest-*
# IntelliJ IDE
.idea
# docs artifacts
docs/modules/api
# only used to package @openzeppelin/contracts
contracts/build/
contracts/README.md
# temporary artifact from solidity-coverage
allFiredEvents

8
.solcover.js Normal file
View File

@ -0,0 +1,8 @@
module.exports = {
norpc: true,
testCommand: 'npm test',
compileCommand: 'npm run compile',
skipFiles: [
'mocks',
]
}

14
.solhint.json Normal file
View File

@ -0,0 +1,14 @@
{
"extends": "solhint:recommended",
"rules": {
"indent": ["error", 4],
"func-order": "off",
"bracket-align": "off",
"compiler-fixed": "off",
"no-simple-event-func-name": "off",
"separate-by-one-line-in-contract": "off",
"two-lines-top-level-separator": "off",
"mark-callable-contracts": "off",
"compiler-version": ["error", "^0.5.0"]
}
}

View File

@ -1,12 +0,0 @@
dist: trusty
sudo: false
group: beta
language: node_js
node_js:
- "6"
before_install:
- npm i -g ethereumjs-testrpc
- npm i -g truffle
script:
- testrpc&
- npm test

139
CHANGELOG.md Normal file
View File

@ -0,0 +1,139 @@
# Changelog
## 2.5.0 (unreleased)
### New features
* `SafeCast.toUintXX`: new library for integer downcasting, which allows for safe operation on smaller types (e.g. `uint32`) when combined with `SafeMath`. ([#1926](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1926))
* `ERC721Metadata`: added `baseURI`, which can be used for dramatic gas savings when all token URIs share a prefix (e.g. `http://api.myapp.com/tokens/<id>`). ([#1970](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1970))
* `EnumerableSet`: new library for storing enumerable sets of values. Only `AddressSet` is supported in this release. ([#2061](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/2061))
* `Create2`: simple library to make usage of the `CREATE2` opcode easier. ([#1744](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1744))
### Improvements
* `ERC777`: `_burn` is now internal, providing more flexibility and making it easier to create tokens that deflate. ([#1908](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1908))
* `ReentrancyGuard`: greatly improved gas efficiency by using the net gas metering mechanism introduced in the Istanbul hardfork. ([#1992](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1992), [#1996](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1996))
* `ERC777`: improve extensibility by making `_send` and related functions `internal`. ([#2027](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2027))
* `ERC721`: improved revert reason when transferring tokens to a non-recipient contract. ([#2018](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2018))
### Breaking changes
* `ERC165Checker` now requires a minimum Solidity compiler version of 0.5.10. ([#1829](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1829))
## 2.4.0 (2019-10-29)
### New features
* `Address.toPayable`: added a helper to convert between address types without having to resort to low-level casting. ([#1773](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1773))
* Facilities to make metatransaction-enabled contracts through the Gas Station Network. ([#1844](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1844))
* `Address.sendValue`: added a replacement to Solidity's `transfer`, removing the fixed gas stipend. ([#1962](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1962))
* Added replacement for functions that don't forward all gas (which have been deprecated): ([#1976](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1976))
* `PullPayment.withdrawPaymentsWithGas(address payable payee)`
* `Escrow.withdrawWithGas(address payable payee)`
* `SafeMath`: added support for custom error messages to `sub`, `div` and `mod` functions. ([#1828](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1828))
### Improvements
* `Address.isContract`: switched from `extcodesize` to `extcodehash` for less gas usage. ([#1802](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1802))
* `ERC20` and `ERC777` updated to throw custom errors on subtraction overflows. ([#1828](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1828))
### Deprecations
* Deprecated functions that don't forward all gas: ([#1976](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1976))
* `PullPayment.withdrawPayments(address payable payee)`
* `Escrow.withdraw(address payable payee)`
### Breaking changes
* `Address` now requires a minimum Solidity compiler version of 0.5.5. ([#1802](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1802))
* `SignatureBouncer` has been removed from drafts, both to avoid confusions with the GSN and `GSNRecipientSignature` (previously called `GSNBouncerSignature`) and because the API was not very clear. ([#1879](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1879))
### How to upgrade from 2.4.0-beta
The final 2.4.0 release includes a refactor of the GSN contracts that will be a breaking change for 2.4.0-beta users.
* The default empty implementations of `_preRelayedCall` and `_postRelayedCall` were removed and must now be explicitly implemented always in custom recipients. If your custom recipient didn't include an implementation, you can provide an empty one.
* `GSNRecipient`, `GSNBouncerBase`, and `GSNContext` were all merged into `GSNRecipient`.
* `GSNBouncerSignature` and `GSNBouncerERC20Fee` were renamed to `GSNRecipientSignature` and `GSNRecipientERC20Fee`.
* It is no longer necessary to inherit from `GSNRecipient` when using `GSNRecipientSignature` and `GSNRecipientERC20Fee`.
For example, a contract using `GSNBouncerSignature` would have to be changed in the following way.
```diff
-contract MyDapp is GSNRecipient, GSNBouncerSignature {
+contract MyDapp is GSNRecipientSignature {
```
Refer to the table below to adjust your inheritance list.
| 2.4.0-beta | 2.4.0 |
| ---------------------------------- | ---------------------------- |
| `GSNRecipient, GSNBouncerSignature`| `GSNRecipientSignature` |
| `GSNRecipient, GSNBouncerERC20Fee` | `GSNRecipientERC20Fee` |
| `GSNBouncerBase` | `GSNRecipient` |
## 2.3.0 (2019-05-27)
### New features
* `ERC1820`: added support for interacting with the [ERC1820](https://eips.ethereum.org/EIPS/eip-1820) registry contract (`IERC1820Registry`), as well as base contracts that can be registered as implementers there. ([#1677](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1677))
* `ERC777`: support for the [ERC777 token](https://eips.ethereum.org/EIPS/eip-777), which has multiple improvements over `ERC20` (but is backwards compatible with it) such as built-in burning, a more straightforward permission system, and optional sender and receiver hooks on transfer (mandatory for contracts!). ([#1684](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1684))
* All contracts now have revert reason strings, which give insight into error conditions, and help debug failing transactions. ([#1704](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1704))
### Improvements
* Reverted the Solidity version bump done in v2.2.0, setting the minimum compiler version to v0.5.0, to prevent unexpected build breakage. Users are encouraged however to stay on top of new compiler releases, which usually include bugfixes. ([#1729](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1729))
### Bugfixes
* `PostDeliveryCrowdsale`: some validations where skipped when paired with other crowdsale flavors, such as `AllowanceCrowdsale`, or `MintableCrowdsale` and `ERC20Capped`, which could cause buyers to not be able to claim their purchased tokens. ([#1721](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1721))
* `ERC20._transfer`: the `from` argument was allowed to be the zero address, so it was possible to internally trigger a transfer of 0 tokens from the zero address. This address is not a valid destinatary of transfers, nor can it give or receive allowance, so this behavior was inconsistent. It now reverts. ([#1752](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1752))
## 2.2.0 (2019-03-14)
### New features
* `ERC20Snapshot`: create snapshots on demand of the token balances and total supply, to later retrieve and e.g. calculate dividends at a past time. ([#1617](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1617))
* `SafeERC20`: `ERC20` contracts with no return value (i.e. that revert on failure) are now supported. ([#1655](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1655))
* `ERC20`: added internal `_approve(address owner, address spender, uint256 value)`, allowing derived contracts to set the allowance of arbitrary accounts. ([#1609](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1609))
* `ERC20Metadata`: added internal `_setTokenURI(string memory tokenURI)`. ([#1618](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1618))
* `TimedCrowdsale`: added internal `_extendTime(uint256 newClosingTime)` as well as `TimedCrowdsaleExtended(uint256 prevClosingTime, uint256 newClosingTime)` event allowing to extend the crowdsale, as long as it hasn't already closed.
### Improvements
* Upgraded the minimum compiler version to v0.5.2: this removes many Solidity warnings that were false positives. ([#1606](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1606))
* `ECDSA`: `recover` no longer accepts malleable signatures (those using upper-range values for `s`, or 0/1 for `v`). ([#1622](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1622))
* `ERC721`'s transfers are now more gas efficient due to removal of unnecessary `SafeMath` calls. ([#1610](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1610))
* Fixed variable shadowing issues. ([#1606](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1606))
### Bugfixes
* (minor) `SafeERC20`: `safeApprove` wasn't properly checking for a zero allowance when attempting to set a non-zero allowance. ([#1647](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1647))
### Breaking changes in drafts
* `TokenMetadata` has been renamed to `ERC20Metadata`. ([#1618](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1618))
* The library `Counter` has been renamed to `Counters` and its API has been improved. See an example in `ERC721`, lines [17](https://github.com/OpenZeppelin/openzeppelin-solidity/blob/3cb4a00fce1da76196ac0ac3a0ae9702b99642b5/contracts/token/ERC721/ERC721.sol#L17) and [204](https://github.com/OpenZeppelin/openzeppelin-solidity/blob/3cb4a00fce1da76196ac0ac3a0ae9702b99642b5/contracts/token/ERC721/ERC721.sol#L204). ([#1610](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1610))
## 2.1.3 (2019-02-26)
* Backported `SafeERC20.safeApprove` bugfix. ([#1647](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1647))
## 2.1.2 (2019-01-17)
* Removed most of the test suite from the npm package, except `PublicRole.behavior.js`, which may be useful to users testing their own `Roles`.
## 2.1.1 (2019-01-04)
* Version bump to avoid conflict in the npm registry.
## 2.1.0 (2019-01-04)
### New features
* Now targeting the 0.5.x line of Solidity compilers. For 0.4.24 support, use version 2.0 of OpenZeppelin.
* `WhitelistCrowdsale`: a crowdsale where only whitelisted accounts (`WhitelistedRole`) can purchase tokens. Adding or removing accounts from the whitelist is done by whitelist admins (`WhitelistAdminRole`). Similar to the pre-2.0 `WhitelistedCrowdsale`. ([#1525](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1525), [#1589](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1589))
* `RefundablePostDeliveryCrowdsale`: replacement for `RefundableCrowdsale` (deprecated, see below) where tokens are only granted once the crowdsale ends (if it meets its goal). ([#1543](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1543))
* `PausableCrowdsale`: allows for pausers (`PauserRole`) to pause token purchases. Other crowdsale operations (e.g. withdrawals and refunds, if applicable) are not affected. ([#832](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/832))
* `ERC20`: `transferFrom` and `_burnFrom ` now emit `Approval` events, to represent the token's state comprehensively through events. ([#1524](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1524))
* `ERC721`: added `_burn(uint256 tokenId)`, replacing the similar deprecated function (see below). ([#1550](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1550))
* `ERC721`: added `_tokensOfOwner(address owner)`, allowing to internally retrieve the array of an account's owned tokens. ([#1522](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1522))
* Crowdsales: all constructors are now `public`, meaning it is not necessary to extend these contracts in order to deploy them. The exception is `FinalizableCrowdsale`, since it is meaningless unless extended. ([#1564](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1564))
* `SignedSafeMath`: added overflow-safe operations for signed integers (`int256`). ([#1559](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1559), [#1588](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1588))
### Improvements
* The compiler version required by `Array` was behind the rest of the libray so it was updated to `v0.4.24`. ([#1553](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1553))
* Now conforming to a 4-space indentation code style. ([1508](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1508))
* `ERC20`: more gas efficient due to removed redundant `require`s. ([#1409](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1409))
* `ERC721`: fixed a bug that prevented internal data structures from being properly cleaned, missing potential gas refunds. ([#1539](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1539) and [#1549](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1549))
* `ERC721`: general gas savings on `transferFrom`, `_mint` and `_burn`, due to redudant `require`s and `SSTORE`s. ([#1549](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1549))
### Bugfixes
### Breaking changes
### Deprecations
* `ERC721._burn(address owner, uint256 tokenId)`: due to the `owner` parameter being unnecessary. ([#1550](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1550))
* `RefundableCrowdsale`: due to trading abuse potential on crowdsales that miss their goal. ([#1543](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1543))

73
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,73 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at maintainers@openzeppelin.org. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org

69
CODE_STYLE.md Normal file
View File

@ -0,0 +1,69 @@
# Code Style
We value clean code and consistency, and those are prerequisites for us to
include new code in the repository. Before proposing a change, please read this
document and take some time to familiarize yourself with the style of the
existing codebase.
## Solidity code
In order to be consistent with all the other Solidity projects, we follow the
[official recommendations documented in the Solidity style guide](http://solidity.readthedocs.io/en/latest/style-guide.html).
Any exception or additions specific to our project are documented below.
### Naming
* Try to avoid acronyms and abbreviations.
* All state variables should be private.
* Private state variables should have an underscore prefix.
```
contract TestContract {
uint256 private _privateVar;
uint256 internal _internalVar;
}
```
* Parameters must not be prefixed with an underscore.
```
function test(uint256 testParameter1, uint256 testParameter2) {
...
}
```
* Internal and private functions should have an underscore prefix.
```
function _testInternal() internal {
...
}
```
```
function _testPrivate() private {
...
}
```
* Events should be emitted immediately after the state change that they
represent, and consequently they should be named in past tense.
```
function _burn(address _who, uint256 _value) internal {
super._burn(_who, _value);
emit TokensBurned(_who, _value);
}
```
Some standards (e.g. ERC20) use present tense, and in those cases the
standard specification prevails.
* Interface names should have a capital I prefix.
```
interface IERC777 {
```

View File

@ -1,105 +1,71 @@
Contributing to Zeppelin
Contributing to OpenZeppelin Contracts
=======
## Design Guidelines
We really appreciate and value contributions to OpenZeppelin Contracts. Please take 5' to review the items listed below to make sure that your contributions are merged as soon as possible.
These are some global design goals in Zeppelin.
## Contribution guidelines
### D0 - Security in Depth
We strive to provide secure, tested, audited code. To achieve this, we need to match intention with function. Thus, documentation, code clarity, community review and security discussions are fundamental.
Smart contracts manage value and are highly vulnerable to errors and attacks. We have very strict [guidelines], please make sure to review them!
### D1 - Simple and Modular
Simpler code means easier audits, and better understanding of what each component does. We look for small files, small contracts, and small functions. If you can separate a contract into two independent functionalities you should probably do it.
## Creating Pull Requests (PRs)
### D2 - Naming Matters
As a contributor, you are expected to fork this repository, work on your own fork and then submit pull requests. The pull requests will be reviewed and eventually merged into the main repo. See ["Fork-a-Repo"](https://help.github.com/articles/fork-a-repo/) for how this works.
We take our time with picking names. Code is going to be written once, and read hundreds of times. Renaming for clarity is encouraged.
## A typical workflow
### D3 - Tests
1) Make sure your fork is up to date with the main repository:
Write tests for all your code. We encourage Test Driven Development so we know when our code is right. Even though not all code in the repository is tested at the moment, we aim to test every line of code in the future.
```
cd openzeppelin-contracts
git remote add upstream https://github.com/OpenZeppelin/openzeppelin-contracts.git
git fetch upstream
git pull --rebase upstream master
```
NOTE: The directory `openzeppelin-contracts` represents your fork's local copy.
### D4 - Check preconditions and post-conditions
A very important way to prevent vulnerabilities is to catch a contracts inconsistent state as early as possible. This is why we want functions to check pre- and post-conditions for executing its logic. When writing code, ask yourself what you are expecting to be true before and after the function runs, and express it in code.
### D5 - Code Consistency
Consistency on the way classes are used is paramount to an easier understanding of the library. The codebase should be as unified as possible. Read existing code and get inspired before you write your own. Follow the style guidelines. Dont hesitate to ask for help on how to best write a specific piece of code.
### D6 - Regular Audits
Following good programming practices is a way to reduce the risk of vulnerabilities, but professional code audits are still needed. We will perform regular code audits on major releases, and hire security professionals to provide independent review.
## Style Guidelines
The design guidelines have quite a high abstraction level. These style guidelines are more concrete and easier to apply, and also more opinionated.
### General
#### G0 - Default to Solidity's official style guide.
Follow the official Solidity style guide: http://solidity.readthedocs.io/en/latest/style-guide.html
#### G1 - No Magic Constants
Avoid constants in the code as much as possible. Magic strings are also magic constants.
#### G2 - Code that Fails Early
We ask our code to fail as soon as possible when an unexpected input was provided or unexpected state was found.
#### G3 - Internal Amounts Must be Signed Integers and Represent the Smallest Units.
Avoid representation errors by always dealing with weis when handling ether. GUIs can convert to more human-friendly representations. Use Signed Integers (int) to prevent underflow problems.
### Testing
#### T1 - Tests Must be Written Elegantly
Style guidelines are not relaxed for tests. Tests are a good way to show how to use the library, and maintaining them is extremely necessary.
Don't write long tests, write helper functions to make them be as short and concise as possible (they should take just a few lines each), and use good variable names.
#### T2 - Tests Must not be Random
Inputs for tests should not be generated randomly. Accounts used to create test contracts are an exception, those can be random. Also, the type and structure of outputs should be checked.
### Documentation
TODO
## Pull Request Workflow
Our workflow is based on GitHub's pull requests. We use feature branches, prepended with: `test`, `feature`, `fix`, `refactor`, or `remove` according to the change the branch introduces. Some examples for such branches are:
```sh
git checkout -b test/some-module
git checkout -b feature/some-new-stuff
git checkout -b fix/some-bug
git checkout -b remove/some-file
2) Branch out from `master` into `fix/some-bug-#123`:
(Postfixing #123 will associate your PR with the issue #123 and make everyone's life easier =D)
```
git checkout -b fix/some-bug-#123
```
We expect pull requests to be rebased to the master branch before merging:
```sh
git remote add zep git@github.com:OpenZeppelin/zeppelin-solidity.git
git pull --rebase zep master
3) Make your changes, add your files, commit, and push to your fork.
```
git add SomeFile.js
git commit "Fix some bug #123"
git push origin fix/some-bug-#123
```
Note that we require rebasing your branch instead of merging it, for commit readability reasons.
4) Run tests, linter, etc. This can be done by running local continuous integration and make sure it passes.
After that, you can push the changes to your fork, by doing:
```sh
git push origin your_branch_name
git push origin feature/some-new-stuff
git push origin fix/some-bug
```bash
npm test
npm run lint
```
Finally go to [github.com/OpenZeppelin/zeppelin-solidity](https://github.com/OpenZeppelin/zeppelin-solidity) in your web browser and issue a new pull request.
or you can simply run CircleCI locally
```bash
circleci local execute --job build
circleci local execute --job test
```
*Note*: requires installing CircleCI and docker locally on your machine.
Main contributors will review your code and possibly ask for changes before your code is pulled in to the main repository. We'll check that all tests pass, review the coding style, and check for general code correctness. If everything is OK, we'll merge your pull request and your code will be part of Zeppelin.
5) Go to [github.com/OpenZeppelin/openzeppelin-contracts](https://github.com/OpenZeppelin/openzeppelin-contracts) in your web browser and issue a new pull request.
If you have any questions feel free to post them to
[github.com/OpenZeppelin/zeppelin-solidity/issues](https://github.com/OpenZeppelin/zeppelin-solidity/issues).
*IMPORTANT* Read the PR template very carefully and make sure to follow all the instructions. These instructions
refer to some very important conditions that your PR must meet in order to be accepted, such as making sure that all tests pass, JS linting tests pass, Solidity linting tests pass, etc.
6) Maintainers will review your code and possibly ask for changes before your code is pulled in to the main repository. We'll check that all tests pass, review the coding style, and check for general code correctness. If everything is OK, we'll merge your pull request and your code will be part of OpenZeppelin.
*IMPORTANT* Please pay attention to the maintainer's feedback, since its a necessary step to keep up with the standards OpenZeppelin attains to.
## All set!
If you have any questions, feel free to post them to github.com/OpenZeppelin/openzeppelin-contracts/issues.
Finally, if you're looking to collaborate and want to find easy tasks to start, look at the issues we marked as ["Good first issue"](https://github.com/OpenZeppelin/openzeppelin-contracts/labels/good%20first%20issue).
Thanks for your time and code!
[guidelines]: GUIDELINES.md

16
DOCUMENTATION.md Normal file
View File

@ -0,0 +1,16 @@
Documentation is hosted at https://docs.openzeppelin.com/contracts.
All of the content for the site is in this repository. The guides are in the
[docs](/docs) directory, and the API Reference is extracted from comments in
the source code. If you want to help improve the content, this is the
repository you should be contributing to.
[`solidity-docgen`](https://github.com/OpenZeppelin/solidity-docgen) is the
program that extracts the API Reference from source code.
The [`docs.openzeppelin.com`](https://github.com/OpenZeppelin/docs.openzeppelin.com)
repository hosts the configuration for the entire site, which includes
documetation for all of the OpenZeppelin projects.
To run the docs locally you should run `npm run docs start` on this
repository.

64
GUIDELINES.md Normal file
View File

@ -0,0 +1,64 @@
Design Guidelines
=======
These are some global design goals in OpenZeppelin.
#### D0 - Security in Depth
We strive to provide secure, tested, audited code. To achieve this, we need to match intention with function. Thus, documentation, code clarity, community review and security discussions are fundamental.
#### D1 - Simple and Modular
Simpler code means easier audits, and better understanding of what each component does. We look for small files, small contracts, and small functions. If you can separate a contract into two independent functionalities you should probably do it.
#### D2 - Naming Matters
We take our time with picking names. Code is going to be written once, and read hundreds of times. Renaming for clarity is encouraged.
#### D3 - Tests
Write tests for all your code. We encourage Test Driven Development so we know when our code is right. Even though not all code in the repository is tested at the moment, we aim to test every line of code in the future.
#### D4 - Check preconditions and post-conditions
A very important way to prevent vulnerabilities is to catch a contracts inconsistent state as early as possible. This is why we want functions to check pre- and post-conditions for executing its logic. When writing code, ask yourself what you are expecting to be true before and after the function runs, and express it in code.
#### D5 - Code Consistency
Consistency on the way classes are used is paramount to an easier understanding of the library. The codebase should be as unified as possible. Read existing code and get inspired before you write your own. Follow the style guidelines. Dont hesitate to ask for help on how to best write a specific piece of code.
#### D6 - Regular Audits
Following good programming practices is a way to reduce the risk of vulnerabilities, but professional code audits are still needed. We will perform regular code audits on major releases, and hire security professionals to provide independent review.
## Style Guidelines
The design guidelines have quite a high abstraction level. These style guidelines are more concrete and easier to apply, and also more opinionated.
### General
#### G0 - Default to Solidity's official style guide.
Follow the official Solidity style guide: https://solidity.readthedocs.io/en/latest/style-guide.html
#### G1 - No Magic Constants
Avoid constants in the code as much as possible. Magic strings are also magic constants.
#### G2 - Code that Fails Early
We ask our code to fail as soon as possible when an unexpected input was provided or unexpected state was found.
#### G3 - Internal Amounts Must be Signed Integers and Represent the Smallest Units.
Avoid representation errors by always dealing with weis when handling ether. GUIs can convert to more human-friendly representations. Use Signed Integers (int) to prevent underflow problems.
### Testing
#### T1 - Tests Must be Written Elegantly
Style guidelines are not relaxed for tests. Tests are a good way to show how to use the library, and maintaining them is extremely necessary.
Don't write long tests, write helper functions to make them be as short and concise as possible (they should take just a few lines each), and use good variable names.
#### T2 - Tests Must not be Random
Inputs for tests should not be generated randomly. Accounts used to create test contracts are an exception, those can be random. Also, the type and structure of outputs should be checked.

18
LICENSE
View File

@ -1,22 +1,22 @@
The MIT License (MIT)
Copyright (c) 2016 Smart Contract Solutions, Inc.
Copyright (c) 2016-2019 zOS Global Limited
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

327
README.md
View File

@ -1,303 +1,78 @@
# Zeppelin Solidity
[![NPM Package](https://img.shields.io/npm/v/zeppelin-solidity.svg?style=flat-square)](https://www.npmjs.org/package/zeppelin-solidity)
[![Build Status](https://img.shields.io/travis/OpenZeppelin/zeppelin-solidity.svg?branch=master&style=flat-square)](https://travis-ci.org/bitpay/bitcore-lib)
# <img src="logo.png" alt="OpenZeppelin" height="40px">
Zeppelin is a library for writing secure Smart Contracts on Ethereum.
[![NPM Package](https://img.shields.io/npm/v/@openzeppelin/contracts.svg)](https://www.npmjs.org/package/@openzeppelin/contracts)
[![Build Status](https://circleci.com/gh/OpenZeppelin/openzeppelin-contracts.svg?style=shield)](https://circleci.com/gh/OpenZeppelin/openzeppelin-contracts)
[![Coverage Status](https://codecov.io/gh/OpenZeppelin/openzeppelin-contracts/graph/badge.svg)](https://codecov.io/gh/OpenZeppelin/openzeppelin-contracts)
With Zeppelin, you can build distributed applications, protocols and organizations:
- using common contract security patterns (See [Onward with Ethereum Smart Contract Security](https://medium.com/bitcorps-blog/onward-with-ethereum-smart-contract-security-97a827e47702#.y3kvdetbz))
- in the Solidity language.
**A library for secure smart contract development.** Build on a solid foundation of community-vetted code.
## Getting Started
* Implementations of standards like [ERC20](https://docs.openzeppelin.com/contracts/erc20) and [ERC721](https://docs.openzeppelin.com/contracts/erc721).
* Flexible [role-based permissioning](https://docs.openzeppelin.com/contracts/access-control) scheme.
* Reusable [Solidity components](https://docs.openzeppelin.com/contracts/utilities) to build custom contracts and complex decentralized systems.
* First-class integration with the [Gas Station Network](https://docs.openzeppelin.com/contracts/gsn) for systems with no gas fees!
* Audited by leading security firms.
Zeppelin integrates with [Truffle](https://github.com/ConsenSys/truffle), an Ethereum development environment. Please install Truffle and initialize your project with `truffle init`.
```sh
npm install -g truffle
mkdir myproject && cd myproject
truffle init
## Overview
### Installation
```console
$ npm install @openzeppelin/contracts
```
To install the Zeppelin library, run:
```sh
npm i zeppelin-solidity
```
OpenZeppelin Contracts features a [stable API](https://docs.openzeppelin.com/contracts/releases-stability#api-stability), which means your contracts won't break unexpectedly when upgrading to a newer minor version.
After that, you'll get all the library's contracts in the `contracts/zeppelin` folder. You can use the contracts in the library like so:
### Usage
```js
import "./zeppelin/Ownable.sol";
Once installed, you can use the contracts in the library by importing them:
contract MyContract is Ownable {
...
```solidity
pragma solidity ^0.5.0;
import "@openzeppelin/contracts/token/ERC721/ERC721Full.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721Mintable.sol";
contract MyNFT is ERC721Full, ERC721Mintable {
constructor() ERC721Full("MyNFT", "MNFT") public {
}
}
```
> NOTE: The current distribution channel is npm, which is not ideal. [We're looking into providing a better tool for code distribution](https://github.com/OpenZeppelin/zeppelin-solidity/issues/13), and ideas are welcome.
_If you're new to smart contract development, head to [Developing Smart Contracts](https://docs.openzeppelin.com/contracts/learn::developing-smart-contracts) to learn about creating a new project and compiling your contracts._
#### Truffle Beta Support
We also support Truffle Beta npm integration. If you're using Truffle Beta, the contracts in `node_modules` will be enough, so feel free to delete the copies at your `contracts` folder. If you're using Truffle Beta, you can use Zeppelin contracts like so:
To keep your system secure, you should **always** use the installed code as-is, and neither copy-paste it from online sources, nor modify it yourself.
```js
import "zeppelin-solidity/contracts/Ownable.sol";
## Learn More
contract MyContract is Ownable {
...
}
```
The guides in the sidebar will teach about different concepts, and how to use the related contracts that OpenZeppelin Contracts provides:
For more info see [the Truffle Beta package management tutorial](http://truffleframework.com/tutorials/package-management).
* [Access Control](https://docs.openzeppelin.com/contracts/access-control): decide who can perform each of the actions on your system.
* [Tokens](https://docs.openzeppelin.com/contracts/tokens): create tradeable assets or collectives, and distribute them via [Crowdsales](https://docs.openzeppelin.com/contracts/crowdsales).
* [Gas Station Network](https://docs.openzeppelin.com/contracts/gsn): let your users interact with your contracts without having to pay for gas themselves.
* [Utilities](https://docs.openzeppelin.com/contracts/utilities): generic useful tools, including non-overflowing math, signature verification, and trustless paying systems.
The [full API](https://docs.openzeppelin.com/contracts/api/token/ERC20) is also thoroughly documented, and serves as a great reference when developing your smart contract application. You can also ask for help or follow Contracts's development in the [community forum](https://forum.openzeppelin.com).
Finally, you may want to take a look at the [guides on our blog](https://blog.openzeppelin.com/guides), which cover several common use cases and good practices.. The following articles provide great background reading, though please note, some of the referenced tools have changed as the tooling in the ecosystem continues to rapidly evolve.
* [The Hitchhikers Guide to Smart Contracts in Ethereum](https://blog.openzeppelin.com/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05) will help you get an overview of the various tools available for smart contract development, and help you set up your environment.
* [A Gentle Introduction to Ethereum Programming, Part 1](https://blog.openzeppelin.com/a-gentle-introduction-to-ethereum-programming-part-1-783cc7796094) provides very useful information on an introductory level, including many basic concepts from the Ethereum platform.
* For a more in-depth dive, you may read the guide [Designing the Architecture for Your Ethereum Application](https://blog.openzeppelin.com/designing-the-architecture-for-your-ethereum-application-9cec086f8317), which discusses how to better structure your application and its relationship to the real world.
## Security
Zeppelin is meant to provide secure, tested and community-audited code, but please use common sense when doing anything that deals with real money! We take no responsibility for your implementation decisions and any security problem you might experience.
If you find a security issue, please email [security@openzeppelin.org](mailto:security@openzeppelin.org).
This project is maintained by [OpenZeppelin](https://openzeppelin.com), and developed following our high standards for code quality and security. OpenZeppelin is meant to provide tested and community-audited code, but please use common sense when doing anything that deals with real money! We take no responsibility for your implementation decisions and any security problems you might experience.
## Contracts
The core development principles and strategies that OpenZeppelin is based on include: security in depth, simple and modular code, clarity-driven naming conventions, comprehensive unit testing, pre-and-post-condition sanity checks, code consistency, and regular audits.
### Ownable
Base contract with an owner.
The latest audit was done on October 2018 on version 2.0.0.
#### Ownable( )
Sets the address of the creator of the contract as the owner.
Please report any security issues you find to security@openzeppelin.org.
#### modifier onlyOwner( )
Prevents function from running if it is called by anyone other than the owner.
#### transfer(address newOwner) onlyOwner
Transfers ownership of the contract to the passed address.
---
### Stoppable
Base contract that provides an emergency stop mechanism.
Inherits from contract Ownable.
#### emergencyStop( ) external onlyOwner
Triggers the stop mechanism on the contract. After this function is called (by the owner of the contract), any function with modifier stopInEmergency will not run.
#### modifier stopInEmergency
Prevents function from running if stop mechanism is activated.
#### modifier onlyInEmergency
Only runs if stop mechanism is activated.
#### release( ) external onlyOwner onlyInEmergency
Deactivates the stop mechanism.
---
### Killable
Base contract that can be killed by owner.
Inherits from contract Ownable.
#### kill( ) onlyOwner
Destroys the contract and sends funds back to the owner.
___
### Claimable
Extension for the Ownable contract, where the ownership needs to be claimed
#### transfer(address newOwner) onlyOwner
Sets the passed address as the pending owner.
#### modifier onlyPendingOwner
Function only runs if called by pending owner.
#### claimOwnership( ) onlyPendingOwner
Completes transfer of ownership by setting pending owner as the new owner.
___
### Migrations
Base contract that allows for a new instance of itself to be created at a different address.
Inherits from contract Ownable.
#### upgrade(address new_address) onlyOwner
Creates a new instance of the contract at the passed address.
#### setCompleted(uint completed) onlyOwner
Sets the last time that a migration was completed.
___
### SafeMath
Provides functions of mathematical operations with safety checks.
#### assert(bool assertion) internal
Throws an error if the passed result is false. Used in this contract by checking mathematical expressions.
#### safeMul(uint a, uint b) internal returns (uint)
Multiplies two unisgned integers. Asserts that dividing the product by the non-zero multiplicand results in the multiplier.
#### safeSub(uint a, unit b) internal returns (uint)
Checks that b is not greater than a before subtracting.
#### safeAdd(unit a, unit b) internal returns (uint)
Checks that the result is greater than both a and b.
___
### LimitBalance
Base contract that provides mechanism for limiting the amount of funds a contract can hold.
#### LimitBalance(unit _limit)
Constructor takes an unisgned integer and sets it as the limit of funds this contract can hold.
#### modifier limitedPayable()
Throws an error if this contract's balance is already above the limit.
___
### PullPayment
Base contract supporting async send for pull payments.
Inherit from this contract and use asyncSend instead of send.
#### asyncSend(address dest, uint amount) internal
Adds sent amount to available balance that payee can pull from this contract, called by payer.
#### withdrawPayments( )
Sends designated balance to payee calling the contract. Throws error if designated balance is 0, if contract does not hold enough funds ot pay the payee, or if the send transaction is not successful.
___
### StandardToken
Based on code by FirstBlood: [FirstBloodToken.sol]
Inherits from contract SafeMath. Implementation of abstract contract ERC20 (see https://github.com/ethereum/EIPs/issues/20)
[FirstBloodToken.sol]: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
#### approve(address _spender, uint _value) returns (bool success)
Sets the amount of the sender's token balance that the passed address is approved to use.
###allowance(address _owner, address _spender) constant returns (uint remaining)
Returns the approved amount of the owner's balance that the spender can use.
###balanceOf(address _owner) constant returns (uint balance)
Returns the token balance of the passed address.
###transferFrom(address _from, address _to, uint _value) returns (bool success)
Transfers tokens from an account that the sender is approved to transfer from. Amount must not be greater than the approved amount or the account's balance.
###function transfer(address _to, uint _value) returns (bool success)
Transfers tokens from sender's account. Amount must not be greater than sender's balance.
___
### BasicToken
Simpler version of StandardToken, with no allowances
#### balanceOf(address _owner) constant returns (uint balance)
Returns the token balance of the passed address.
###function transfer(address _to, uint _value) returns (bool success)
Transfers tokens from sender's account. Amount must not be greater than sender's balance.
___
### CrowdsaleToken
Simple ERC20 Token example, with crowdsale token creation.
Inherits from contract StandardToken.
#### createTokens(address recipient) payable
Creates tokens based on message value and credits to the recipient.
#### getPrice() constant returns (uint result)
Returns the amount of tokens per 1 ether.
___
### Bounty
To create a bounty for your contract, inherit from the base `Bounty` contract and provide an implementation for `deployContract()` returning the new contract address.
```
import {Bounty, Target} from "./zeppelin/Bounty.sol";
import "./YourContract.sol";
contract YourBounty is Bounty {
function deployContract() internal returns(address) {
return new YourContract()
}
}
```
Next, implement invariant logic into your smart contract.
Your main contract should inherit from the Target class and implement the checkInvariant method. This is a function that should check everything your contract assumes to be true all the time. If this function returns false, it means your contract was broken in some way and is in an inconsistent state. This is what security researchers will try to acomplish when trying to get the bounty.
At contracts/YourContract.sol
```
import {Bounty, Target} from "./zeppelin/Bounty.sol";
contract YourContract is Target {
function checkInvariant() returns(bool) {
// Implement your logic to make sure that none of the invariants are broken.
}
}
```
Next, deploy your bounty contract along with your main contract to the network.
At `migrations/2_deploy_contracts.js`
```
module.exports = function(deployer) {
deployer.deploy(YourContract);
deployer.deploy(YourBounty);
};
```
Next, add a reward to the bounty contract
After deploying the contract, send reward funds into the bounty contract.
From `truffle console`
```
bounty = YourBounty.deployed();
address = 0xb9f68f96cde3b895cc9f6b14b856081b41cb96f1; // your account address
reward = 5; // reward to pay to a researcher who breaks your contract
web3.eth.sendTransaction({
from: address,
to: bounty.address,
value: web3.toWei(reward, "ether")
})
```
If researchers break the contract, they can claim their reward.
For each researcher who wants to hack the contract and claims the reward, refer to our [test](./test/Bounty.js) for the detail.
Finally, if you manage to protect your contract from security researchers, you can reclaim the bounty funds. To end the bounty, kill the contract so that all the rewards go back to the owner.
```
bounty.kill();
```
## More Developer Resources
Building a distributed application, protocol or organization with Zeppelin?
- Ask for help and follow progress at: https://zeppelin-slackin.herokuapp.com/
Interested in contributing to Zeppelin?
- Framework proposal and roadmap: https://medium.com/zeppelin-blog/zeppelin-framework-proposal-and-development-roadmap-fdfa9a3a32ab#.iain47pak
- Issue tracker: https://github.com/OpenZeppelin/zeppelin-solidity/issues
- Contribution guidelines: https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/CONTRIBUTING.md
## Collaborating organizations and audits by Zeppelin
- [Golem](https://golem.network/)
- [Mediachain](https://golem.network/)
- [Truffle](http://truffleframework.com/)
- [Firstblood](http://firstblood.io/)
- [Rootstock](http://www.rsk.co/)
- [Consensys](https://consensys.net/)
- [DigixGlobal](https://www.dgx.io/)
- [Coinfund](https://coinfund.io/)
- [DemocracyEarth](http://democracy.earth/)
- [Signatura](https://signatura.co/)
- [Ether.camp](http://www.ether.camp/)
among others...
## Contribute
OpenZeppelin exists thanks to its contributors. There are many ways you can participate and help build high quality software. Check out the [contribution guide](CONTRIBUTING.md)!
## License
Code released under the [MIT License](https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/LICENSE).
OpenZeppelin is released under the [MIT License](LICENSE).

99
RELEASING.md Normal file
View File

@ -0,0 +1,99 @@
# Releasing
This document describes our release process, and contains the steps to be followed by an OpenZeppelin maintainer at the several stages of a release.
We release a new version of OpenZeppelin monthly. Release cycles are tracked in the [issue milestones](https://github.com/OpenZeppelin/openzeppelin-contracts/milestones).
Each release has at least one release candidate published first, intended for community review and any critical fixes that may come out of it. At the moment we leave 1 week between the first release candidate and the final release.
Before starting make sure to verify the following items.
* Your local `master` branch is in sync with your `upstream` remote (it may have another name depending on your setup).
* Your repo is clean, particularly with no untracked files in the contracts and tests directories. Verify with `git clean -n`.
## Creating the release branch
We'll refer to a release `vX.Y.Z`.
```
git checkout master
git checkout -b release-vX.Y.Z
```
## Creating a release candidate
Once in the release branch, change the version string in `package.json`, `package-lock.json` and `ethpm.json` to `X.Y.Z-rc.R`. (This will be `X.Y.Z-rc.1` for the first release candidate.) Commit these changes and tag the commit as `vX.Y.Z-rc.R`.
```
git add package.json package-lock.json ethpm.json
git commit -m "Release candidate vX.Y.Z-rc.R"
git tag -a vX.Y.Z-rc.R
git push upstream release-vX.Y.Z
git push upstream vX.Y.Z-rc.R
```
Draft the release notes in our [GitHub releases](https://github.com/OpenZeppelin/openzeppelin-contracts/releases). Make sure to mark it as a pre-release! Try to be consistent with our previous release notes in the title and format of the text. Release candidates don't need a detailed changelog, but make sure to include a link to GitHub's compare page.
Once the CI run for the new tag is green, publish on npm under the `next` tag. You should see the contracts compile automatically.
```
npm publish --tag next
```
Publish the release notes on GitHub and the forum, and ask our community manager to announce the release candidate on at least Twitter.
## Creating the final release
Make sure to have the latest changes from `upstream` in your local release branch.
```
git checkout release-vX.Y.Z
git pull upstream
```
Before starting the release process, make one final commit to CHANGELOG.md, including the date of the release.
Change the version string in `package.json`, `package-lock.json` and `ethpm.json` removing the "-rc.R" suffix. Commit these changes and tag the commit as `vX.Y.Z`.
```
git add package.json package-lock.json ethpm.json
git commit -m "Release vX.Y.Z"
git tag -a vX.Y.Z
git push upstream release-vX.Y.Z
git push upstream vX.Y.Z
```
Draft the release notes in GitHub releases. Try to be consistent with our previous release notes in the title and format of the text. Make sure to include a detailed changelog.
Once the CI run for the new tag is green, publish on npm. You should see the contracts compile automatically.
```
npm publish
```
Publish the release notes on GitHub and ask our community manager to announce the release!
Delete the `next` tag in the npm package as there is no longer a release candidate.
```
npm dist-tag rm --otp $2FA_CODE @openzeppelin/contracts next
```
## Merging the release branch
After the final release, the release branch should be merged back into `master`. This merge must not be squashed because it would lose the tagged release commit. Since the GitHub repo is set up to only allow squashed merges, the merge should be done locally and pushed.
Make sure to have the latest changes from `upstream` in your local release branch.
```
git checkout release-vX.Y.Z
git pull upstream
```
```
git checkout master
git merge --no-ff release-vX.Y.Z
git push upstream master
```
The release branch can then be deleted on GitHub.

290
audit/2017-03.md Normal file
View File

@ -0,0 +1,290 @@
# OpenZeppelin Audit
March, 2017
Authored by Dennis Peterson and Peter Vessenes
# Introduction
Zeppelin requested that New Alchemy perform an audit of the contracts in their OpenZeppelin library. The OpenZeppelin contracts are a set of contracts intended to be a safe building block for a variety of uses by parties that may not be as sophisticated as the OpenZeppelin team. It is a design goal that the contracts be deployable safely and "as-is".
The contracts are hosted at:
https://github.com/OpenZeppelin/zeppelin-solidity
All the contracts in the "contracts" folder are in scope.
The git commit hash we evaluated is:
9c5975a706b076b7000e8179f8101e0c61024c87
# Disclaimer
The audit makes no statements or warrantees about utility of the code, safety of the code, suitability of the business model, regulatory regime for the business model, or any other statements about fitness of the contracts to purpose, or their bugfree status. The audit documentation is for discussion purposes only.
# Executive Summary
Overall the OpenZeppelin codebase is of reasonably high quality -- it is clean, modular and follows best practices throughout.
It is still in flux as a codebase, and needs better documentation per file as to expected behavior and future plans. It probably needs more comprehensive and aggressive tests written by people less nice than the current OpenZeppelin team.
We identified two critical errors and one moderate issue, and would not recommend this commit hash for public use until these bugs are remedied.
The repository includes a set of Truffle unit tests, a requirement and best practice for smart contracts like these; we recommend these be bulked up.
# Discussion
## Big Picture: Is This A Worthwhile Project?
As soon as a developer touches OpenZeppelin contracts, they will modify something, leaving them in an un-audited state. We do not recommend developers deploy any unaudited code to the Blockchain if it will handle money, information or other things of value.
> "In accordance with Unix philosophy, Perl gives you enough rope to hang yourself"
> --Larry Wall
We think this is an incredibly worthwhile project -- aided by the high code quality. Creating a framework that can be easily extended helps increase the average code quality on the Blockchain by charting a course for developers and encouraging containment of modifications to certain sections.
> "Rust: The language that makes you take the safety off before shooting yourself in the foot"
> -- (@mbrubeck)
We think much more could be done here, and recommend the OpenZeppelin team keep at this and keep focusing on the design goal of removing rope and adding safety.
## Solidity Version Updates Recommended
Most of the code uses Solidity 0.4.11, but some files under `Ownership` are marked 0.4.0. These should be updated.
Solidity 0.4.10 will add several features which could be useful in these contracts:
- `assert(condition)`, which throws if the condition is false
- `revert()`, which rolls back without consuming all remaining gas.
- `address.transfer(value)`, which is like `send` but automatically propagates exceptions, and supports `.gas()`. See https://github.com/ethereum/solidity/issues/610 for more on this.
## Error Handling: Throw vs Return False
Solidity standards allow two ways to handle an error -- either calling `throw` or returning `false`. Both have benefits. In particular, a `throw` guarantees a complete wipe of the call stack (up to the preceding external call), whereas `false` allows a function to continue.
In general we prefer `throw` in our code audits, because it is simpler -- it's less for an engineer to keep track of. Returning `false` and using logic to check results can quickly become a poorly-tracked state machine, and this sort of complexity can cause errors.
In the OpenZeppelin contracts, both styles are used in different parts of the codebase. `SimpleToken` transfers throw upon failure, while the full ERC20 token returns `false`. Some modifiers `throw`, others just wrap the function body in a conditional, effectively allowing the function to return false if the condition is not met.
We don't love this, and would usually recommend you stick with one style or the other throughout the codebase.
In at least one case, these different techniques are combined cleverly (see the Multisig comments, line 65). As a set of contracts intended for general use, we recommend you either strive for more consistency or document explicit design criteria that govern which techniques are used where.
Note that it may be impossible to use either one in all situations. For example, SafeMath functions pretty much have to throw upon failure, but ERC20 specifies returning booleans. Therefore we make no particular recommendations, but simply point out inconsistencies to consider.
# Critical Issues
## Stuck Ether in Crowdsale contract
CrowdsaleToken.sol has no provision for withdrawing the raised ether. We *strongly* recommend a standard `withdraw` function be added. There is no scenario in which someone should deploy this contract as is, whether for testing or live.
## Recursive Call in MultisigWallet
Line 45 of `MultisigWallet.sol` checks if the amount being sent by `execute` is under a daily limit.
This function can only be called by the "Owner". As a first angle of attack, it's worth asking what will happen if the multisig wallet owners reset the daily limit by approving a call to `resetSpentToday`.
If a chain of calls can be constructed in which the owner confirms the `resetSpentToday` function and then withdraws through `execute` in a recursive call, the contract can be drained. In fact, this could be done without a recursive call, just through repeated `execute` calls alternating with the `confirm` calls.
We are still working through the confirmation protocol in `Shareable.sol`, but we are not convinced that this is impossible, in fact it looks possible. The flexibility any shared owner has in being able to revoke confirmation later is another worrisome angle of approach even if some simple patches are included.
This bug has a number of causes that need to be addressed:
1. `resetSpentToday` and `confirm` together do not limit the days on which the function can be called or (it appears) the number of times it can be called.
1. Once a call has been confirmed and `execute`d it appears that it can be re-executed. This is not good.
3. `confirmandCheck` doesn't seem to have logic about whether or not the function in question has been called.
4. Even if it did, `revoke` would need updates and logic to deal with revocation requests after a function call had been completed.
We do not recommend using the MultisigWallet until these issues are fixed.
# Moderate to Minor Issues
## PullPayment
PullPayment.sol needs some work. It has no explicit provision for cancelling a payment. This would be desirable in a number of scenarios; consider a payee losing their wallet, or giving a griefing address, or just an address that requires more than the default gas offered by `send`.
`asyncSend` has no overflow checking. This is a bad plan. We recommend overflow and underflow checking at the layer closest to the data manipulation.
`asyncSend` allows more balance to be queued up for sending than the contract holds. This is probably a bad idea, or at the very least should be called something different. If the intent is to allow this, it should have provisions for dealing with race conditions between competing `withdrawPayments` calls.
It would be nice to see how many payments are pending. This would imply a bit of a rewrite; we recommend this contract get some design time, and that developers don't rely on it in its current state.
## Shareable Contract
We do not believe the `Shareable.sol` contract is ready for primetime. It is missing functions, and as written may be vulnerable to a reordering attack -- an attack in which a miner or other party "racing" with a smart contract participant inserts their own information into a list or mapping.
The confirmation and revocation code needs to be looked over with a very careful eye imagining extraordinarily bad behavior by shared owners before this contract can be called safe.
No sanity checks on the initial constructor's `required` argument are worrisome as well.
# Line by Line Comments
## Lifecycle
### Killable
Very simple, allows owner to call selfdestruct, sending funds to owner. No issues. However, note that `selfdestruct` should typically not be used; it is common that a developer may want to access data in a former contract, and they may not understand that `selfdestruct` limits access to the contract. We recommend better documentation about this dynamic, and an alternate function name for `kill` like `completelyDestroy` while `kill` would perhaps merely send funds to the owner.
Also note that a killable function allows the owner to take funds regardless of other logic. This may be desirable or undesirable depending on the circumstances. Perhaps `Killable` should have a different name as well.
### Migrations
I presume that the goal of this contract is to allow and annotate a migration to a new smart contract address. We are not clear here how this would be accomplished by the code; we'd like to review with the OpenZeppelin team.
### Pausable
We like these pauses! Note that these allow significant griefing potential by owners, and that this might not be obvious to participants in smart contracts using the OpenZeppelin framework. We would recommend that additional sample logic be added to for instance the TokenContract showing safer use of the pause and resume functions. In particular, we would recommend a timelock after which anyone could unpause the contract.
The modifers use the pattern `if(bool){_;}`. This is fine for functions that return false upon failure, but could be problematic for functions expected to throw upon failure. See our comments above on standardizing on `throw` or `return(false)`.
## Ownership
### Ownable
Line 19: Modifier throws if doesn't meet condition, in contrast to some other inheritable modifiers (e.g. in Pausable) that use `if(bool){_;}`.
### Claimable
Inherits from Ownable but the existing owner sets a pendingOwner who has to claim ownership.
Line 17: Another modifier that throws.
### DelayedClaimable
Is there any reason to descend from Ownable directly, instead of just Claimable, which descends from Ownable? If not, descending from both just adds confusion.
### Contactable
Allows owner to set a public string of contract information. No issues.
### Shareable
This needs some work. Doesn't check if `_required <= len(_owners)` for instance, that would be a bummer. What if _required were like `MAX - 1`?
I have a general concern about the difference between `owners`, `_owners`, and `owner` in `Ownable.sol`. I recommend "Owners" be renamed. In general we do not recomment single character differences in variable names, although a preceding underscore is not uncommon in Solidity code.
Line 34: "this contract only has six types of events"...actually only two.
Line 61: Why is `ownerIndex` keyed by addresses hashed to `uint`s? Why not use the addresses directly, so `ownerIndex` is less obscure, and so there's stronger typing?
Line 62: Do not love `++i) ... owners[2+ i]`. Makes me do math, which is not what I want to do. I want to not have to do math.
There should probably be a function for adding a new operation, so the developer doesn't have to work directly with the internal data. (This would make the multisig contract even shorter.)
There's a `revoke` function but not a `propose` function that we can see.
Beware reordering. If `propose` allows the user to choose a bytes string for their proposal, bad things(TM) will happen as currently written.
### Multisig
Just an interface. Note it allows changing an owner address, but not changing the number of owners. This is somewhat limiting but also simplifies implementation.
## Payment
### PullPayment
Safe from reentrance attack since ether send is at the end, plus it uses `.send()` rather than `.call.value()`.
There's an argument to be made that `.call.value()` is a better option *if* you're sure that it will be done after all state updates, since `.send` will fail if the recipient has an expensive fallback function. However, in the context of a function meant to be embedded in other contracts, it's probably better to use `.send`. One possible compromise is to add a function which allows only the owner to send ether via `.call.value`.
If you don't use `call.value` you should implement a `cancel` function in case some value is pending here.
Line 14:
Doesn't use safeAdd. Although it appears that payout amounts can only be increased, in fact the payer could lower the payout as much as desired via overflow. Also, the payer could add a large non-overflowing amount, causing the payment to exceed the contract balance and therefore fail when withdraw is attempted.
Recommendation: track the sum of non-withdrawn asyncSends, and don't allow a new one which exceeds the leftover balance. If it's ever desirable to make payments revocable, it should be done explicitly.
## Tokens
### ERC20
Standard ERC20 interface only.
There's a security hole in the standard, reported at Edcon: `approve` does not protect against race conditions and simply replaces the current value. An approved spender could wait for the owner to call `approve` again, then attempt to spend the old limit before the new limit is applied. If successful, this attacker could successfully spend the sum of both limits.
This could be fixed by either (1) including the old limit as a parameter, so the update will fail if some gets spent, or (2) using the value parameter as a delta instead of replacement value.
This is not fixable while adhering to the current full ERC20 standard, though it would be possible to add a "secureApprove" function. The impact isn't extreme since at least you can only be attacked by addresses you approved. Also, users could mitigate this by always setting spending limits to zero and checking for spends, before setting the new limit.
Edcon slides:
https://drive.google.com/file/d/0ByMtMw2hul0EN3NCaVFHSFdxRzA/view
### ERC20Basic
Simpler interface skipping the Approve function. Note this departs from ERC20 in another way: transfer throws instead of returning false.
### BasicToken
Uses `SafeSub` and `SafeMath`, so transfer `throw`s instead of returning false. This complies with ERC20Basic but not the actual ERC20 standard.
### StandardToken
Implementation of full ERC20 token.
Transfer() and transferFrom() use SafeMath functions, which will cause them to throw instead of returning false. Not a security issue but departs from standard.
### SimpleToken
Sample instantiation of StandardToken. Note that in this sample, decimals is 18 and supply only 10,000, so the supply is a small fraction of a single nominal token.
### CrowdsaleToken
StandardToken which mints tokens at a fixed price when sent ether.
There's no provision for owner withdrawing the ether. As a sample for crowdsales it should be Ownable and allow the owner to withdraw ether, rather than stranding the ether in the contract.
Note: an alternative pattern is a mint() function which is only callable from a separate crowdsale contract, so any sort of rules can be added without modifying the token itself.
### VestedToken
Lines 23, 27:
Functions `transfer()` and `transferFrom()` have a modifier canTransfer which throws if not enough tokens are available. However, transfer() returns a boolean success. Inconsistent treatment of failure conditions may cause problems for other contracts using the token. (Note that transferableTokens() relies on safeSub(), so will also throw if there's insufficient balance.)
Line 64:
Delete not actually necessary since the value is overwritten in the next line anyway.
## Root level
### Bounty
Avoids potential race condition by having each researcher deploy a separate contract for attack; if a research manages to break his associated contract, other researchers can't immediately claim the reward, they have to reproduce the attack in their own contracts.
A developer could subvert this intent by implementing `deployContract()` to always return the same address. However, this would break the `researchers` mapping, updating the researcher address associated with the contract. This could be prevented by blocking rewrites in `researchers`.
### DayLimit
The modifier `limitedDaily` calls `underLimit`, which both checks that the spend is below the daily limit, and adds the input value to the daily spend. This is fine if all functions throw upon failure. However, not all OpenZeppelin functions do this; there are functions that returns false, and modifiers that wrap the function body in `if (bool) {_;}`. In these cases, `_value` will be added to `spentToday`, but ether may not actually be sent because other preconditions were not met. (However in the OpenZeppelin multisig this is not a problem.)
Lines 4, 11:
Comment claims that `DayLimit` is multiowned, and Shareable is imported, but DayLimit does not actually inherit from Shareable. The intent may be for child contracts to inherit from Shareable (as Multisig does); in this case the import should be removed and the comment altered.
Line 46:
Manual overflow check instead of using safeAdd. Since this is called from a function that throws upon failure anyway, there's no real downside to using safeAdd.
### LimitBalance
No issues.
### MultisigWallet
Lines 28, 76, 80:
`kill`, `setDailyLimit`, and `resetSpentToday` only happen with multisig approval, and hashes for these actions are logged by Shareable. However, they should probably post their own events for easy reading.
Line 45:
This call to underLimit will reduce the daily limit, and then either throw or return 0. So in this case there's no danger that the limit will be reduced without the operation going through.
Line 65:
Shareable's onlyManyOwners will take the user's confirmation, and execute the function body if and only if enough users have confirmed. Whole thing throws if the send fails, which will roll back the confirmation. Confirm returns false if not enough have confirmed yet, true if the whole thing succeeds, and throws only in the exceptional circumstance that the designated transaction unexpectedly fails. Elegant design.
Line 68:
Throw here is good but note this function can fail either by returning false or by throwing.
Line 92:
A bit odd to split `clearPending()` between this contract and Shareable. However this does allow contracts inheriting from Shareable to use custom structs for pending transactions.
### SafeMath
Another interesting comment from the same Edcon presentation was that the overflow behavior of Solidity is undocumented, so in theory, source code that relies on it could break with a future revision.
However, compiled code should be fine, and in the unlikely event that the compiler is revised in this way, there should be plenty of warning. (But this is an argument for keeping overflow checks isolated in SafeMath.)
Aside from that small caveat, these are fine.

BIN
audit/2018-10.pdf Normal file

Binary file not shown.

View File

@ -1,58 +0,0 @@
pragma solidity ^0.4.4;
import './PullPayment.sol';
import './Killable.sol';
/*
* Bounty
*
* This bounty will pay out to a researcher if they break invariant logic of the contract.
*/
contract Bounty is PullPayment, Killable {
Target target;
bool public claimed;
mapping(address => address) public researchers;
event TargetCreated(address createdAddress);
function() payable {
if (claimed) throw;
}
function createTarget() returns(Target) {
target = Target(deployContract());
researchers[target] = msg.sender;
TargetCreated(target);
return target;
}
function deployContract() internal returns(address);
function checkInvariant() returns(bool){
return target.checkInvariant();
}
function claim(Target target) {
address researcher = researchers[target];
if (researcher == 0) throw;
// Check Target contract invariants
if (target.checkInvariant()) {
throw;
}
asyncSend(researcher, this.balance);
claimed = true;
}
}
/*
* Target
*
* Your main contract should inherit from this class and implement the checkInvariant method. This is a function that should check everything your contract assumes to be true all the time. If this function returns false, it means your contract was broken in some way and is in an inconsistent state. This is what security researchers will try to acomplish when trying to get the bounty.
*/
contract Target {
function checkInvariant() returns(bool);
}

View File

@ -1,30 +0,0 @@
pragma solidity ^0.4.0;
import './Ownable.sol';
/*
* Claimable
*
* Extension for the Ownable contract, where the ownership needs to be claimed. This allows the new owner to accept the transfer.
*/
contract Claimable is Ownable {
address public pendingOwner;
modifier onlyPendingOwner() {
if (msg.sender == pendingOwner)
_;
}
function transfer(address newOwner) onlyOwner {
pendingOwner = newOwner;
}
function claimOwnership() onlyPendingOwner {
owner = pendingOwner;
pendingOwner = 0x0;
}
}

View File

@ -1,75 +0,0 @@
pragma solidity ^0.4.4;
import './Shareable.sol';
/*
* DayLimit
*
* inheritable "property" contract that enables methods to be protected by placing a linear limit (specifiable)
* on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method
* uses is specified in the modifier.
*/
contract DayLimit is Shareable {
// FIELDS
uint public dailyLimit;
uint public spentToday;
uint public lastDay;
// MODIFIERS
// simple modifier for daily limit.
modifier limitedDaily(uint _value) {
if (underLimit(_value))
_;
}
// CONSTRUCTOR
// stores initial daily limit and records the present day's index.
function DayLimit(uint _limit) {
dailyLimit = _limit;
lastDay = today();
}
// METHODS
// (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) external {
dailyLimit = _newLimit;
}
// resets the amount already spent today. needs many of the owners to confirm
function resetSpentToday() onlymanyowners(sha3(msg.data)) external {
spentToday = 0;
}
// INTERNAL METHODS
// checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and
// returns true. otherwise just returns false.
function underLimit(uint _value) internal onlyOwner returns (bool) {
// reset the spend limit if we're on a different day to last time.
if (today() > lastDay) {
spentToday = 0;
lastDay = today();
}
// check to see if there's enough left - if so, subtract and return true.
// overflow protection // dailyLimit check
if (spentToday + _value >= spentToday && spentToday + _value <= dailyLimit) {
spentToday += _value;
return true;
}
return false;
}
// determines today's index.
function today() private constant returns (uint) {
return now / 1 days;
}
}

27
contracts/GSN/Context.sol Normal file
View File

@ -0,0 +1,27 @@
pragma solidity ^0.5.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}

View File

@ -0,0 +1,228 @@
pragma solidity ^0.5.0;
import "./IRelayRecipient.sol";
import "./IRelayHub.sol";
import "./Context.sol";
/**
* @dev Base GSN recipient contract: includes the {IRelayRecipient} interface
* and enables GSN support on all contracts in the inheritance tree.
*
* TIP: This contract is abstract. The functions {IRelayRecipient-acceptRelayedCall},
* {_preRelayedCall}, and {_postRelayedCall} are not implemented and must be
* provided by derived contracts. See the
* xref:ROOT:gsn-strategies.adoc#gsn-strategies[GSN strategies] for more
* information on how to use the pre-built {GSNRecipientSignature} and
* {GSNRecipientERC20Fee}, or how to write your own.
*/
contract GSNRecipient is IRelayRecipient, Context {
// Default RelayHub address, deployed on mainnet and all testnets at the same address
address private _relayHub = 0xD216153c06E857cD7f72665E0aF1d7D82172F494;
uint256 constant private RELAYED_CALL_ACCEPTED = 0;
uint256 constant private RELAYED_CALL_REJECTED = 11;
// How much gas is forwarded to postRelayedCall
uint256 constant internal POST_RELAYED_CALL_MAX_GAS = 100000;
/**
* @dev Emitted when a contract changes its {IRelayHub} contract to a new one.
*/
event RelayHubChanged(address indexed oldRelayHub, address indexed newRelayHub);
/**
* @dev Returns the address of the {IRelayHub} contract for this recipient.
*/
function getHubAddr() public view returns (address) {
return _relayHub;
}
/**
* @dev Switches to a new {IRelayHub} instance. This method is added for future-proofing: there's no reason to not
* use the default instance.
*
* IMPORTANT: After upgrading, the {GSNRecipient} will no longer be able to receive relayed calls from the old
* {IRelayHub} instance. Additionally, all funds should be previously withdrawn via {_withdrawDeposits}.
*/
function _upgradeRelayHub(address newRelayHub) internal {
address currentRelayHub = _relayHub;
require(newRelayHub != address(0), "GSNRecipient: new RelayHub is the zero address");
require(newRelayHub != currentRelayHub, "GSNRecipient: new RelayHub is the current one");
emit RelayHubChanged(currentRelayHub, newRelayHub);
_relayHub = newRelayHub;
}
/**
* @dev Returns the version string of the {IRelayHub} for which this recipient implementation was built. If
* {_upgradeRelayHub} is used, the new {IRelayHub} instance should be compatible with this version.
*/
// This function is view for future-proofing, it may require reading from
// storage in the future.
function relayHubVersion() public view returns (string memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return "1.0.0";
}
/**
* @dev Withdraws the recipient's deposits in `RelayHub`.
*
* Derived contracts should expose this in an external interface with proper access control.
*/
function _withdrawDeposits(uint256 amount, address payable payee) internal {
IRelayHub(_relayHub).withdraw(amount, payee);
}
// Overrides for Context's functions: when called from RelayHub, sender and
// data require some pre-processing: the actual sender is stored at the end
// of the call data, which in turns means it needs to be removed from it
// when handling said data.
/**
* @dev Replacement for msg.sender. Returns the actual sender of a transaction: msg.sender for regular transactions,
* and the end-user for GSN relayed calls (where msg.sender is actually `RelayHub`).
*
* IMPORTANT: Contracts derived from {GSNRecipient} should never use `msg.sender`, and use {_msgSender} instead.
*/
function _msgSender() internal view returns (address payable) {
if (msg.sender != _relayHub) {
return msg.sender;
} else {
return _getRelayedCallSender();
}
}
/**
* @dev Replacement for msg.data. Returns the actual calldata of a transaction: msg.data for regular transactions,
* and a reduced version for GSN relayed calls (where msg.data contains additional information).
*
* IMPORTANT: Contracts derived from {GSNRecipient} should never use `msg.data`, and use {_msgData} instead.
*/
function _msgData() internal view returns (bytes memory) {
if (msg.sender != _relayHub) {
return msg.data;
} else {
return _getRelayedCallData();
}
}
// Base implementations for pre and post relayedCall: only RelayHub can invoke them, and data is forwarded to the
// internal hook.
/**
* @dev See `IRelayRecipient.preRelayedCall`.
*
* This function should not be overriden directly, use `_preRelayedCall` instead.
*
* * Requirements:
*
* - the caller must be the `RelayHub` contract.
*/
function preRelayedCall(bytes calldata context) external returns (bytes32) {
require(msg.sender == getHubAddr(), "GSNRecipient: caller is not RelayHub");
return _preRelayedCall(context);
}
/**
* @dev See `IRelayRecipient.preRelayedCall`.
*
* Called by `GSNRecipient.preRelayedCall`, which asserts the caller is the `RelayHub` contract. Derived contracts
* must implement this function with any relayed-call preprocessing they may wish to do.
*
*/
function _preRelayedCall(bytes memory context) internal returns (bytes32);
/**
* @dev See `IRelayRecipient.postRelayedCall`.
*
* This function should not be overriden directly, use `_postRelayedCall` instead.
*
* * Requirements:
*
* - the caller must be the `RelayHub` contract.
*/
function postRelayedCall(bytes calldata context, bool success, uint256 actualCharge, bytes32 preRetVal) external {
require(msg.sender == getHubAddr(), "GSNRecipient: caller is not RelayHub");
_postRelayedCall(context, success, actualCharge, preRetVal);
}
/**
* @dev See `IRelayRecipient.postRelayedCall`.
*
* Called by `GSNRecipient.postRelayedCall`, which asserts the caller is the `RelayHub` contract. Derived contracts
* must implement this function with any relayed-call postprocessing they may wish to do.
*
*/
function _postRelayedCall(bytes memory context, bool success, uint256 actualCharge, bytes32 preRetVal) internal;
/**
* @dev Return this in acceptRelayedCall to proceed with the execution of a relayed call. Note that this contract
* will be charged a fee by RelayHub
*/
function _approveRelayedCall() internal pure returns (uint256, bytes memory) {
return _approveRelayedCall("");
}
/**
* @dev See `GSNRecipient._approveRelayedCall`.
*
* This overload forwards `context` to _preRelayedCall and _postRelayedCall.
*/
function _approveRelayedCall(bytes memory context) internal pure returns (uint256, bytes memory) {
return (RELAYED_CALL_ACCEPTED, context);
}
/**
* @dev Return this in acceptRelayedCall to impede execution of a relayed call. No fees will be charged.
*/
function _rejectRelayedCall(uint256 errorCode) internal pure returns (uint256, bytes memory) {
return (RELAYED_CALL_REJECTED + errorCode, "");
}
/*
* @dev Calculates how much RelayHub will charge a recipient for using `gas` at a `gasPrice`, given a relayer's
* `serviceFee`.
*/
function _computeCharge(uint256 gas, uint256 gasPrice, uint256 serviceFee) internal pure returns (uint256) {
// The fee is expressed as a percentage. E.g. a value of 40 stands for a 40% fee, so the recipient will be
// charged for 1.4 times the spent amount.
return (gas * gasPrice * (100 + serviceFee)) / 100;
}
function _getRelayedCallSender() private pure returns (address payable result) {
// We need to read 20 bytes (an address) located at array index msg.data.length - 20. In memory, the array
// is prefixed with a 32-byte length value, so we first add 32 to get the memory read index. However, doing
// so would leave the address in the upper 20 bytes of the 32-byte word, which is inconvenient and would
// require bit shifting. We therefore subtract 12 from the read index so the address lands on the lower 20
// bytes. This can always be done due to the 32-byte prefix.
// The final memory read index is msg.data.length - 20 + 32 - 12 = msg.data.length. Using inline assembly is the
// easiest/most-efficient way to perform this operation.
// These fields are not accessible from assembly
bytes memory array = msg.data;
uint256 index = msg.data.length;
// solhint-disable-next-line no-inline-assembly
assembly {
// Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
result := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
}
return result;
}
function _getRelayedCallData() private pure returns (bytes memory) {
// RelayHub appends the sender address at the end of the calldata, so in order to retrieve the actual msg.data,
// we must strip the last 20 bytes (length of an address type) from it.
uint256 actualDataLength = msg.data.length - 20;
bytes memory actualData = new bytes(actualDataLength);
for (uint256 i = 0; i < actualDataLength; ++i) {
actualData[i] = msg.data[i];
}
return actualData;
}
}

View File

@ -0,0 +1,151 @@
pragma solidity ^0.5.0;
import "./GSNRecipient.sol";
import "../math/SafeMath.sol";
import "../ownership/Secondary.sol";
import "../token/ERC20/SafeERC20.sol";
import "../token/ERC20/ERC20.sol";
import "../token/ERC20/ERC20Detailed.sol";
/**
* @dev A xref:ROOT:gsn-strategies.adoc#gsn-strategies[GSN strategy] that charges transaction fees in a special purpose ERC20
* token, which we refer to as the gas payment token. The amount charged is exactly the amount of Ether charged to the
* recipient. This means that the token is essentially pegged to the value of Ether.
*
* The distribution strategy of the gas payment token to users is not defined by this contract. It's a mintable token
* whose only minter is the recipient, so the strategy must be implemented in a derived contract, making use of the
* internal {_mint} function.
*/
contract GSNRecipientERC20Fee is GSNRecipient {
using SafeERC20 for __unstable__ERC20PrimaryAdmin;
using SafeMath for uint256;
enum GSNRecipientERC20FeeErrorCodes {
INSUFFICIENT_BALANCE
}
__unstable__ERC20PrimaryAdmin private _token;
/**
* @dev The arguments to the constructor are the details that the gas payment token will have: `name` and `symbol`. `decimals` is hard-coded to 18.
*/
constructor(string memory name, string memory symbol) public {
_token = new __unstable__ERC20PrimaryAdmin(name, symbol, 18);
}
/**
* @dev Returns the gas payment token.
*/
function token() public view returns (IERC20) {
return IERC20(_token);
}
/**
* @dev Internal function that mints the gas payment token. Derived contracts should expose this function in their public API, with proper access control mechanisms.
*/
function _mint(address account, uint256 amount) internal {
_token.mint(account, amount);
}
/**
* @dev Ensures that only users with enough gas payment token balance can have transactions relayed through the GSN.
*/
function acceptRelayedCall(
address,
address from,
bytes calldata,
uint256 transactionFee,
uint256 gasPrice,
uint256,
uint256,
bytes calldata,
uint256 maxPossibleCharge
)
external
view
returns (uint256, bytes memory)
{
if (_token.balanceOf(from) < maxPossibleCharge) {
return _rejectRelayedCall(uint256(GSNRecipientERC20FeeErrorCodes.INSUFFICIENT_BALANCE));
}
return _approveRelayedCall(abi.encode(from, maxPossibleCharge, transactionFee, gasPrice));
}
/**
* @dev Implements the precharge to the user. The maximum possible charge (depending on gas limit, gas price, and
* fee) will be deducted from the user balance of gas payment token. Note that this is an overestimation of the
* actual charge, necessary because we cannot predict how much gas the execution will actually need. The remainder
* is returned to the user in {_postRelayedCall}.
*/
function _preRelayedCall(bytes memory context) internal returns (bytes32) {
(address from, uint256 maxPossibleCharge) = abi.decode(context, (address, uint256));
// The maximum token charge is pre-charged from the user
_token.safeTransferFrom(from, address(this), maxPossibleCharge);
}
/**
* @dev Returns to the user the extra amount that was previously charged, once the actual execution cost is known.
*/
function _postRelayedCall(bytes memory context, bool, uint256 actualCharge, bytes32) internal {
(address from, uint256 maxPossibleCharge, uint256 transactionFee, uint256 gasPrice) =
abi.decode(context, (address, uint256, uint256, uint256));
// actualCharge is an _estimated_ charge, which assumes postRelayedCall will use all available gas.
// This implementation's gas cost can be roughly estimated as 10k gas, for the two SSTORE operations in an
// ERC20 transfer.
uint256 overestimation = _computeCharge(POST_RELAYED_CALL_MAX_GAS.sub(10000), gasPrice, transactionFee);
actualCharge = actualCharge.sub(overestimation);
// After the relayed call has been executed and the actual charge estimated, the excess pre-charge is returned
_token.safeTransfer(from, maxPossibleCharge.sub(actualCharge));
}
}
/**
* @title __unstable__ERC20PrimaryAdmin
* @dev An ERC20 token owned by another contract, which has minting permissions and can use transferFrom to receive
* anyone's tokens. This contract is an internal helper for GSNRecipientERC20Fee, and should not be used
* outside of this context.
*/
// solhint-disable-next-line contract-name-camelcase
contract __unstable__ERC20PrimaryAdmin is ERC20, ERC20Detailed, Secondary {
uint256 private constant UINT256_MAX = 2**256 - 1;
constructor(string memory name, string memory symbol, uint8 decimals) public ERC20Detailed(name, symbol, decimals) {
// solhint-disable-previous-line no-empty-blocks
}
// The primary account (GSNRecipientERC20Fee) can mint tokens
function mint(address account, uint256 amount) public onlyPrimary {
_mint(account, amount);
}
// The primary account has 'infinite' allowance for all token holders
function allowance(address owner, address spender) public view returns (uint256) {
if (spender == primary()) {
return UINT256_MAX;
} else {
return super.allowance(owner, spender);
}
}
// Allowance for the primary account cannot be changed (it is always 'infinite')
function _approve(address owner, address spender, uint256 value) internal {
if (spender == primary()) {
return;
} else {
super._approve(owner, spender, value);
}
}
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
if (recipient == primary()) {
_transfer(sender, recipient, amount);
return true;
} else {
return super.transferFrom(sender, recipient, amount);
}
}
}

View File

@ -0,0 +1,72 @@
pragma solidity ^0.5.0;
import "./GSNRecipient.sol";
import "../cryptography/ECDSA.sol";
/**
* @dev A xref:ROOT:gsn-strategies.adoc#gsn-strategies[GSN strategy] that allows relayed transactions through when they are
* accompanied by the signature of a trusted signer. The intent is for this signature to be generated by a server that
* performs validations off-chain. Note that nothing is charged to the user in this scheme. Thus, the server should make
* sure to account for this in their economic and threat model.
*/
contract GSNRecipientSignature is GSNRecipient {
using ECDSA for bytes32;
address private _trustedSigner;
enum GSNRecipientSignatureErrorCodes {
INVALID_SIGNER
}
/**
* @dev Sets the trusted signer that is going to be producing signatures to approve relayed calls.
*/
constructor(address trustedSigner) public {
require(trustedSigner != address(0), "GSNRecipientSignature: trusted signer is the zero address");
_trustedSigner = trustedSigner;
}
/**
* @dev Ensures that only transactions with a trusted signature can be relayed through the GSN.
*/
function acceptRelayedCall(
address relay,
address from,
bytes calldata encodedFunction,
uint256 transactionFee,
uint256 gasPrice,
uint256 gasLimit,
uint256 nonce,
bytes calldata approvalData,
uint256
)
external
view
returns (uint256, bytes memory)
{
bytes memory blob = abi.encodePacked(
relay,
from,
encodedFunction,
transactionFee,
gasPrice,
gasLimit,
nonce, // Prevents replays on RelayHub
getHubAddr(), // Prevents replays in multiple RelayHubs
address(this) // Prevents replays in multiple recipients
);
if (keccak256(blob).toEthSignedMessageHash().recover(approvalData) == _trustedSigner) {
return _approveRelayedCall();
} else {
return _rejectRelayedCall(uint256(GSNRecipientSignatureErrorCodes.INVALID_SIGNER));
}
}
function _preRelayedCall(bytes memory) internal returns (bytes32) {
// solhint-disable-previous-line no-empty-blocks
}
function _postRelayedCall(bytes memory, bool, uint256, bytes32) internal {
// solhint-disable-previous-line no-empty-blocks
}
}

267
contracts/GSN/IRelayHub.sol Normal file
View File

@ -0,0 +1,267 @@
pragma solidity ^0.5.0;
/**
* @dev Interface for `RelayHub`, the core contract of the GSN. Users should not need to interact with this contract
* directly.
*
* See the https://github.com/OpenZeppelin/openzeppelin-gsn-helpers[OpenZeppelin GSN helpers] for more information on
* how to deploy an instance of `RelayHub` on your local test network.
*/
interface IRelayHub {
// Relay management
/**
* @dev Adds stake to a relay and sets its `unstakeDelay`. If the relay does not exist, it is created, and the caller
* of this function becomes its owner. If the relay already exists, only the owner can call this function. A relay
* cannot be its own owner.
*
* All Ether in this function call will be added to the relay's stake.
* Its unstake delay will be assigned to `unstakeDelay`, but the new value must be greater or equal to the current one.
*
* Emits a {Staked} event.
*/
function stake(address relayaddr, uint256 unstakeDelay) external payable;
/**
* @dev Emitted when a relay's stake or unstakeDelay are increased
*/
event Staked(address indexed relay, uint256 stake, uint256 unstakeDelay);
/**
* @dev Registers the caller as a relay.
* The relay must be staked for, and not be a contract (i.e. this function must be called directly from an EOA).
*
* This function can be called multiple times, emitting new {RelayAdded} events. Note that the received
* `transactionFee` is not enforced by {relayCall}.
*
* Emits a {RelayAdded} event.
*/
function registerRelay(uint256 transactionFee, string calldata url) external;
/**
* @dev Emitted when a relay is registered or re-registerd. Looking at these events (and filtering out
* {RelayRemoved} events) lets a client discover the list of available relays.
*/
event RelayAdded(address indexed relay, address indexed owner, uint256 transactionFee, uint256 stake, uint256 unstakeDelay, string url);
/**
* @dev Removes (deregisters) a relay. Unregistered (but staked for) relays can also be removed.
*
* Can only be called by the owner of the relay. After the relay's `unstakeDelay` has elapsed, {unstake} will be
* callable.
*
* Emits a {RelayRemoved} event.
*/
function removeRelayByOwner(address relay) external;
/**
* @dev Emitted when a relay is removed (deregistered). `unstakeTime` is the time when unstake will be callable.
*/
event RelayRemoved(address indexed relay, uint256 unstakeTime);
/** Deletes the relay from the system, and gives back its stake to the owner.
*
* Can only be called by the relay owner, after `unstakeDelay` has elapsed since {removeRelayByOwner} was called.
*
* Emits an {Unstaked} event.
*/
function unstake(address relay) external;
/**
* @dev Emitted when a relay is unstaked for, including the returned stake.
*/
event Unstaked(address indexed relay, uint256 stake);
// States a relay can be in
enum RelayState {
Unknown, // The relay is unknown to the system: it has never been staked for
Staked, // The relay has been staked for, but it is not yet active
Registered, // The relay has registered itself, and is active (can relay calls)
Removed // The relay has been removed by its owner and can no longer relay calls. It must wait for its unstakeDelay to elapse before it can unstake
}
/**
* @dev Returns a relay's status. Note that relays can be deleted when unstaked or penalized, causing this function
* to return an empty entry.
*/
function getRelay(address relay) external view returns (uint256 totalStake, uint256 unstakeDelay, uint256 unstakeTime, address payable owner, RelayState state);
// Balance management
/**
* @dev Deposits Ether for a contract, so that it can receive (and pay for) relayed transactions.
*
* Unused balance can only be withdrawn by the contract itself, by calling {withdraw}.
*
* Emits a {Deposited} event.
*/
function depositFor(address target) external payable;
/**
* @dev Emitted when {depositFor} is called, including the amount and account that was funded.
*/
event Deposited(address indexed recipient, address indexed from, uint256 amount);
/**
* @dev Returns an account's deposits. These can be either a contracts's funds, or a relay owner's revenue.
*/
function balanceOf(address target) external view returns (uint256);
/**
* Withdraws from an account's balance, sending it back to it. Relay owners call this to retrieve their revenue, and
* contracts can use it to reduce their funding.
*
* Emits a {Withdrawn} event.
*/
function withdraw(uint256 amount, address payable dest) external;
/**
* @dev Emitted when an account withdraws funds from `RelayHub`.
*/
event Withdrawn(address indexed account, address indexed dest, uint256 amount);
// Relaying
/**
* @dev Checks if the `RelayHub` will accept a relayed operation.
* Multiple things must be true for this to happen:
* - all arguments must be signed for by the sender (`from`)
* - the sender's nonce must be the current one
* - the recipient must accept this transaction (via {acceptRelayedCall})
*
* Returns a `PreconditionCheck` value (`OK` when the transaction can be relayed), or a recipient-specific error
* code if it returns one in {acceptRelayedCall}.
*/
function canRelay(
address relay,
address from,
address to,
bytes calldata encodedFunction,
uint256 transactionFee,
uint256 gasPrice,
uint256 gasLimit,
uint256 nonce,
bytes calldata signature,
bytes calldata approvalData
) external view returns (uint256 status, bytes memory recipientContext);
// Preconditions for relaying, checked by canRelay and returned as the corresponding numeric values.
enum PreconditionCheck {
OK, // All checks passed, the call can be relayed
WrongSignature, // The transaction to relay is not signed by requested sender
WrongNonce, // The provided nonce has already been used by the sender
AcceptRelayedCallReverted, // The recipient rejected this call via acceptRelayedCall
InvalidRecipientStatusCode // The recipient returned an invalid (reserved) status code
}
/**
* @dev Relays a transaction.
*
* For this to succeed, multiple conditions must be met:
* - {canRelay} must `return PreconditionCheck.OK`
* - the sender must be a registered relay
* - the transaction's gas price must be larger or equal to the one that was requested by the sender
* - the transaction must have enough gas to not run out of gas if all internal transactions (calls to the
* recipient) use all gas available to them
* - the recipient must have enough balance to pay the relay for the worst-case scenario (i.e. when all gas is
* spent)
*
* If all conditions are met, the call will be relayed and the recipient charged. {preRelayedCall}, the encoded
* function and {postRelayedCall} will be called in that order.
*
* Parameters:
* - `from`: the client originating the request
* - `to`: the target {IRelayRecipient} contract
* - `encodedFunction`: the function call to relay, including data
* - `transactionFee`: fee (%) the relay takes over actual gas cost
* - `gasPrice`: gas price the client is willing to pay
* - `gasLimit`: gas to forward when calling the encoded function
* - `nonce`: client's nonce
* - `signature`: client's signature over all previous params, plus the relay and RelayHub addresses
* - `approvalData`: dapp-specific data forwared to {acceptRelayedCall}. This value is *not* verified by the
* `RelayHub`, but it still can be used for e.g. a signature.
*
* Emits a {TransactionRelayed} event.
*/
function relayCall(
address from,
address to,
bytes calldata encodedFunction,
uint256 transactionFee,
uint256 gasPrice,
uint256 gasLimit,
uint256 nonce,
bytes calldata signature,
bytes calldata approvalData
) external;
/**
* @dev Emitted when an attempt to relay a call failed.
*
* This can happen due to incorrect {relayCall} arguments, or the recipient not accepting the relayed call. The
* actual relayed call was not executed, and the recipient not charged.
*
* The `reason` parameter contains an error code: values 1-10 correspond to `PreconditionCheck` entries, and values
* over 10 are custom recipient error codes returned from {acceptRelayedCall}.
*/
event CanRelayFailed(address indexed relay, address indexed from, address indexed to, bytes4 selector, uint256 reason);
/**
* @dev Emitted when a transaction is relayed.
* Useful when monitoring a relay's operation and relayed calls to a contract
*
* Note that the actual encoded function might be reverted: this is indicated in the `status` parameter.
*
* `charge` is the Ether value deducted from the recipient's balance, paid to the relay's owner.
*/
event TransactionRelayed(address indexed relay, address indexed from, address indexed to, bytes4 selector, RelayCallStatus status, uint256 charge);
// Reason error codes for the TransactionRelayed event
enum RelayCallStatus {
OK, // The transaction was successfully relayed and execution successful - never included in the event
RelayedCallFailed, // The transaction was relayed, but the relayed call failed
PreRelayedFailed, // The transaction was not relayed due to preRelatedCall reverting
PostRelayedFailed, // The transaction was relayed and reverted due to postRelatedCall reverting
RecipientBalanceChanged // The transaction was relayed and reverted due to the recipient's balance changing
}
/**
* @dev Returns how much gas should be forwarded to a call to {relayCall}, in order to relay a transaction that will
* spend up to `relayedCallStipend` gas.
*/
function requiredGas(uint256 relayedCallStipend) external view returns (uint256);
/**
* @dev Returns the maximum recipient charge, given the amount of gas forwarded, gas price and relay fee.
*/
function maxPossibleCharge(uint256 relayedCallStipend, uint256 gasPrice, uint256 transactionFee) external view returns (uint256);
// Relay penalization.
// Any account can penalize relays, removing them from the system immediately, and rewarding the
// reporter with half of the relay's stake. The other half is burned so that, even if the relay penalizes itself, it
// still loses half of its stake.
/**
* @dev Penalize a relay that signed two transactions using the same nonce (making only the first one valid) and
* different data (gas price, gas limit, etc. may be different).
*
* The (unsigned) transaction data and signature for both transactions must be provided.
*/
function penalizeRepeatedNonce(bytes calldata unsignedTx1, bytes calldata signature1, bytes calldata unsignedTx2, bytes calldata signature2) external;
/**
* @dev Penalize a relay that sent a transaction that didn't target `RelayHub`'s {registerRelay} or {relayCall}.
*/
function penalizeIllegalTransaction(bytes calldata unsignedTx, bytes calldata signature) external;
/**
* @dev Emitted when a relay is penalized.
*/
event Penalized(address indexed relay, address sender, uint256 amount);
/**
* @dev Returns an account's nonce in `RelayHub`.
*/
function getNonce(address from) external view returns (uint256);
}

View File

@ -0,0 +1,74 @@
pragma solidity ^0.5.0;
/**
* @dev Base interface for a contract that will be called via the GSN from {IRelayHub}.
*
* TIP: You don't need to write an implementation yourself! Inherit from {GSNRecipient} instead.
*/
interface IRelayRecipient {
/**
* @dev Returns the address of the {IRelayHub} instance this recipient interacts with.
*/
function getHubAddr() external view returns (address);
/**
* @dev Called by {IRelayHub} to validate if this recipient accepts being charged for a relayed call. Note that the
* recipient will be charged regardless of the execution result of the relayed call (i.e. if it reverts or not).
*
* The relay request was originated by `from` and will be served by `relay`. `encodedFunction` is the relayed call
* calldata, so its first four bytes are the function selector. The relayed call will be forwarded `gasLimit` gas,
* and the transaction executed with a gas price of at least `gasPrice`. `relay`'s fee is `transactionFee`, and the
* recipient will be charged at most `maxPossibleCharge` (in wei). `nonce` is the sender's (`from`) nonce for
* replay attack protection in {IRelayHub}, and `approvalData` is a optional parameter that can be used to hold a signature
* over all or some of the previous values.
*
* Returns a tuple, where the first value is used to indicate approval (0) or rejection (custom non-zero error code,
* values 1 to 10 are reserved) and the second one is data to be passed to the other {IRelayRecipient} functions.
*
* {acceptRelayedCall} is called with 50k gas: if it runs out during execution, the request will be considered
* rejected. A regular revert will also trigger a rejection.
*/
function acceptRelayedCall(
address relay,
address from,
bytes calldata encodedFunction,
uint256 transactionFee,
uint256 gasPrice,
uint256 gasLimit,
uint256 nonce,
bytes calldata approvalData,
uint256 maxPossibleCharge
)
external
view
returns (uint256, bytes memory);
/**
* @dev Called by {IRelayHub} on approved relay call requests, before the relayed call is executed. This allows to e.g.
* pre-charge the sender of the transaction.
*
* `context` is the second value returned in the tuple by {acceptRelayedCall}.
*
* Returns a value to be passed to {postRelayedCall}.
*
* {preRelayedCall} is called with 100k gas: if it runs out during exection or otherwise reverts, the relayed call
* will not be executed, but the recipient will still be charged for the transaction's cost.
*/
function preRelayedCall(bytes calldata context) external returns (bytes32);
/**
* @dev Called by {IRelayHub} on approved relay call requests, after the relayed call is executed. This allows to e.g.
* charge the user for the relayed call costs, return any overcharges from {preRelayedCall}, or perform
* contract-specific bookkeeping.
*
* `context` is the second value returned in the tuple by {acceptRelayedCall}. `success` is the execution status of
* the relayed call. `actualCharge` is an estimate of how much the recipient will be charged for the transaction,
* not including any gas used by {postRelayedCall} itself. `preRetVal` is {preRelayedCall}'s return value.
*
*
* {postRelayedCall} is called with 100k gas: if it runs out during execution or otherwise reverts, the relayed call
* and the call to {preRelayedCall} will be reverted retroactively, but the recipient will still be charged for the
* transaction's cost.
*/
function postRelayedCall(bytes calldata context, bool success, uint256 actualCharge, bytes32 preRetVal) external;
}

30
contracts/GSN/README.adoc Normal file
View File

@ -0,0 +1,30 @@
= Gas Station Network (GSN)
_Available since v2.4.0._
This set of contracts provide all the tools required to make a contract callable via the https://gsn.openzeppelin.com[Gas Station Network].
TIP: If you're new to the GSN, head over to our xref:learn::sending-gasless-transactions.adoc[overview of the system] and basic guide to xref:ROOT:gsn.adoc[creating a GSN-capable contract].
The core contract a recipient must inherit from is {GSNRecipient}: it includes all necessary interfaces, as well as some helper methods to make interacting with the GSN easier.
Utilities to make writing xref:ROOT:gsn-strategies.adoc[GSN strategies] easy are available in {GSNRecipient}, or you can simply use one of our pre-made strategies:
* {GSNRecipientERC20Fee} charges the end user for gas costs in an application-specific xref:ROOT:tokens.adoc#ERC20[ERC20 token]
* {GSNRecipientSignature} accepts all relayed calls that have been signed by a trusted third party (e.g. a private key in a backend)
You can also take a look at the two contract interfaces that make up the GSN protocol: {IRelayRecipient} and {IRelayHub}, but you won't need to use those directly.
== Recipient
{{GSNRecipient}}
== Strategies
{{GSNRecipientSignature}}
{{GSNRecipientERC20Fee}}
== Protocol
{{IRelayRecipient}}
{{IRelayHub}}

View File

@ -1,15 +0,0 @@
pragma solidity ^0.4.4;
import "./Ownable.sol";
/*
* Killable
* Base contract that can be killed by owner. All funds in contract will be sent to the owner.
*/
contract Killable is Ownable {
function kill() onlyOwner {
selfdestruct(owner);
}
}

View File

@ -1,18 +0,0 @@
pragma solidity ^0.4.4;
contract LimitBalance {
uint public limit;
function LimitBalance(uint _limit) {
limit = _limit;
}
modifier limitedPayable() {
if (this.balance > limit) {
throw;
}
_;
}
}

View File

@ -1,15 +0,0 @@
pragma solidity ^0.4.4;
import './Ownable.sol';
contract Migrations is Ownable {
uint public lastCompletedMigration;
function setCompleted(uint completed) onlyOwner {
lastCompletedMigration = completed;
}
function upgrade(address newAddress) onlyOwner {
Migrations upgraded = Migrations(newAddress);
upgraded.setCompleted(lastCompletedMigration);
}
}

View File

@ -1,29 +0,0 @@
pragma solidity ^0.4.4;
/*
* Multisig
* Interface contract for multisig proxy contracts; see below for docs.
*/
contract Multisig {
// EVENTS
// logged events:
// Funds has arrived into the wallet (record how much).
event Deposit(address _from, uint value);
// Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going).
event SingleTransact(address owner, uint value, address to, bytes data);
// Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going).
event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data);
// Confirmation still needed for a transaction.
event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data);
// FUNCTIONS
// TODO: document
function changeOwner(address _from, address _to) external;
function execute(address _to, uint _value, bytes _data) external returns (bytes32);
function confirm(bytes32 _h) returns (bool);
}

View File

@ -1,102 +0,0 @@
pragma solidity ^0.4.4;
import "./Multisig.sol";
import "./Shareable.sol";
import "./DayLimit.sol";
/*
* MultisigWallet
* usage:
* bytes32 h = Wallet(w).from(oneOwner).execute(to, value, data);
* Wallet(w).from(anotherOwner).confirm(h);
*/
contract MultisigWallet is Multisig, Shareable, DayLimit {
// TYPES
// Transaction structure to remember details of transaction lest it need be saved for a later call.
struct Transaction {
address to;
uint value;
bytes data;
}
// CONSTRUCTOR
// just pass on the owner array to the multiowned and
// the limit to daylimit
function MultisigWallet(address[] _owners, uint _required, uint _daylimit)
Shareable(_owners, _required)
DayLimit(_daylimit) { }
// METHODS
// kills the contract sending everything to `_to`.
function kill(address _to) onlymanyowners(sha3(msg.data)) external {
suicide(_to);
}
// gets called when no other function matches
function() payable {
// just being sent some cash?
if (msg.value > 0)
Deposit(msg.sender, msg.value);
}
// Outside-visible transact entry point. Executes transaction immediately if below daily spend limit.
// If not, goes into multisig process. We provide a hash on return to allow the sender to provide
// shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value
// and _data arguments). They still get the option of using them if they want, anyways.
function execute(address _to, uint _value, bytes _data) external onlyOwner returns (bytes32 _r) {
// first, take the opportunity to check that we're under the daily limit.
if (underLimit(_value)) {
SingleTransact(msg.sender, _value, _to, _data);
// yes - just execute the call.
if (!_to.call.value(_value)(_data)) {
throw;
}
return 0;
}
// determine our operation hash.
_r = sha3(msg.data, block.number);
if (!confirm(_r) && txs[_r].to == 0) {
txs[_r].to = _to;
txs[_r].value = _value;
txs[_r].data = _data;
ConfirmationNeeded(_r, msg.sender, _value, _to, _data);
}
}
// confirm a transaction through just the hash. we use the previous transactions map, txs, in order
// to determine the body of the transaction from the hash provided.
function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) {
if (txs[_h].to != 0) {
if (!txs[_h].to.call.value(txs[_h].value)(txs[_h].data)) {
throw;
}
MultiTransact(msg.sender, _h, txs[_h].value, txs[_h].to, txs[_h].data);
delete txs[_h];
return true;
}
}
// INTERNAL METHODS
function clearPending() internal {
uint length = pendingsIndex.length;
for (uint i = 0; i < length; ++i) {
delete txs[pendingsIndex[i]];
}
super.clearPending();
}
// FIELDS
// pending transactions we have at present.
mapping (bytes32 => Transaction) txs;
}

View File

@ -1,26 +0,0 @@
pragma solidity ^0.4.4;
/*
* Ownable
*
* Base contract with an owner.
* Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.
*/
contract Ownable {
address public owner;
function Ownable() {
owner = msg.sender;
}
modifier onlyOwner() {
if (msg.sender == owner)
_;
}
function transfer(address newOwner) onlyOwner {
if (newOwner != address(0)) owner = newOwner;
}
}

View File

@ -1,30 +0,0 @@
pragma solidity ^0.4.4;
/*
* PullPayment
* Base contract supporting async send for pull payments.
* Inherit from this contract and use asyncSend instead of send.
*/
contract PullPayment {
mapping(address => uint) public payments;
// store sent amount as credit to be pulled, called by payer
function asyncSend(address dest, uint amount) internal {
payments[dest] += amount;
}
// withdraw accumulated balance, called by payee
function withdrawPayments() {
address payee = msg.sender;
uint payment = payments[payee];
if (payment == 0) throw;
if (this.balance < payment) throw;
payments[payee] = 0;
if (!payee.send(payment)) {
throw;
}
}
}

View File

@ -1,29 +0,0 @@
pragma solidity ^0.4.4;
/**
* Math operations with safety checks
*/
contract SafeMath {
function safeMul(uint a, uint b) internal returns (uint) {
uint c = a * b;
assert(a == 0 || c / a == b);
return c;
}
function safeSub(uint a, uint b) internal returns (uint) {
assert(b <= a);
return a - b;
}
function safeAdd(uint a, uint b) internal returns (uint) {
uint c = a + b;
assert(c>=a && c>=b);
return c;
}
function assert(bool assertion) internal {
if (!assertion) throw;
}
}

View File

@ -1,165 +0,0 @@
pragma solidity ^0.4.4;
/*
* Shareable
*
* Based on https://github.com/ethereum/dapp-bin/blob/master/wallet/wallet.sol
*
* inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a single, or, crucially, each of a number of, designated owners.
*
* usage:
* use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by some number (specified in constructor) of the set of owners (specified in the constructor) before the interior is executed.
*/
contract Shareable {
// TYPES
// struct for the status of a pending operation.
struct PendingState {
uint yetNeeded;
uint ownersDone;
uint index;
}
// FIELDS
// the number of owners that must confirm the same operation before it is run.
uint public required;
// list of owners
uint[256] owners;
uint constant c_maxOwners = 250;
// index on the list of owners to allow reverse lookup
mapping(uint => uint) ownerIndex;
// the ongoing operations.
mapping(bytes32 => PendingState) pendings;
bytes32[] pendingsIndex;
// EVENTS
// this contract only has six types of events: it can accept a confirmation, in which case
// we record owner and operation (hash) alongside it.
event Confirmation(address owner, bytes32 operation);
event Revoke(address owner, bytes32 operation);
// MODIFIERS
// simple single-sig function modifier.
modifier onlyOwner {
if (isOwner(msg.sender))
_;
}
// multi-sig function modifier: the operation must have an intrinsic hash in order
// that later attempts can be realised as the same underlying operation and
// thus count as confirmations.
modifier onlymanyowners(bytes32 _operation) {
if (confirmAndCheck(_operation))
_;
}
// CONSTRUCTOR
// constructor is given number of sigs required to do protected "onlymanyowners" transactions
// as well as the selection of addresses capable of confirming them.
function Shareable(address[] _owners, uint _required) {
owners[1] = uint(msg.sender);
ownerIndex[uint(msg.sender)] = 1;
for (uint i = 0; i < _owners.length; ++i) {
owners[2 + i] = uint(_owners[i]);
ownerIndex[uint(_owners[i])] = 2 + i;
}
required = _required;
}
// METHODS
// Revokes a prior confirmation of the given operation
function revoke(bytes32 _operation) external {
uint index = ownerIndex[uint(msg.sender)];
// make sure they're an owner
if (index == 0) return;
uint ownerIndexBit = 2**index;
var pending = pendings[_operation];
if (pending.ownersDone & ownerIndexBit > 0) {
pending.yetNeeded++;
pending.ownersDone -= ownerIndexBit;
Revoke(msg.sender, _operation);
}
}
// Gets an owner by 0-indexed position (using numOwners as the count)
function getOwner(uint ownerIndex) external constant returns (address) {
return address(owners[ownerIndex + 1]);
}
function isOwner(address _addr) returns (bool) {
return ownerIndex[uint(_addr)] > 0;
}
function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
var pending = pendings[_operation];
uint index = ownerIndex[uint(_owner)];
// make sure they're an owner
if (index == 0) return false;
// determine the bit to set for this owner.
uint ownerIndexBit = 2**index;
return !(pending.ownersDone & ownerIndexBit == 0);
}
// INTERNAL METHODS
function confirmAndCheck(bytes32 _operation) internal returns (bool) {
// determine what index the present sender is:
uint index = ownerIndex[uint(msg.sender)];
// make sure they're an owner
if (index == 0) return;
var pending = pendings[_operation];
// if we're not yet working on this operation, switch over and reset the confirmation status.
if (pending.yetNeeded == 0) {
// reset count of confirmations needed.
pending.yetNeeded = required;
// reset which owners have confirmed (none) - set our bitmap to 0.
pending.ownersDone = 0;
pending.index = pendingsIndex.length++;
pendingsIndex[pending.index] = _operation;
}
// determine the bit to set for this owner.
uint ownerIndexBit = 2**index;
// make sure we (the message sender) haven't confirmed this operation previously.
if (pending.ownersDone & ownerIndexBit == 0) {
Confirmation(msg.sender, _operation);
// ok - check if count is enough to go ahead.
if (pending.yetNeeded <= 1) {
// enough confirmations: reset and run interior.
delete pendingsIndex[pendings[_operation].index];
delete pendings[_operation];
return true;
}
else
{
// not enough: record that this owner in particular confirmed.
pending.yetNeeded--;
pending.ownersDone |= ownerIndexBit;
}
}
}
function clearPending() internal {
uint length = pendingsIndex.length;
for (uint i = 0; i < length; ++i)
if (pendingsIndex[i] != 0)
delete pendings[pendingsIndex[i]];
delete pendingsIndex;
}
}

View File

@ -1,28 +0,0 @@
pragma solidity ^0.4.4;
import "./Ownable.sol";
/*
* Stoppable
* Abstract contract that allows children to implement an
* emergency stop mechanism.
*/
contract Stoppable is Ownable {
bool public stopped;
modifier stopInEmergency { if (!stopped) _; }
modifier onlyInEmergency { if (stopped) _; }
// called by the owner on emergency, triggers stopped state
function emergencyStop() external onlyOwner {
stopped = true;
}
// called by the owner on end of emergency, returns to normal state
function release() external onlyOwner onlyInEmergency {
stopped = false;
}
}

View File

@ -0,0 +1,21 @@
= Access
NOTE: This page is incomplete. We're working to improve it for the next release. Stay tuned!
== Library
{{Roles}}
== Roles
{{CapperRole}}
{{MinterRole}}
{{PauserRole}}
{{SignerRole}}
{{WhitelistAdminRole}}
{{WhitelistedRole}}

View File

@ -0,0 +1,36 @@
pragma solidity ^0.5.0;
/**
* @title Roles
* @dev Library for managing addresses assigned to a Role.
*/
library Roles {
struct Role {
mapping (address => bool) bearer;
}
/**
* @dev Give an account access to this role.
*/
function add(Role storage role, address account) internal {
require(!has(role, account), "Roles: account already has role");
role.bearer[account] = true;
}
/**
* @dev Remove an account's access to this role.
*/
function remove(Role storage role, address account) internal {
require(has(role, account), "Roles: account does not have role");
role.bearer[account] = false;
}
/**
* @dev Check if an account has this role.
* @return bool
*/
function has(Role storage role, address account) internal view returns (bool) {
require(account != address(0), "Roles: account is the zero address");
return role.bearer[account];
}
}

View File

@ -0,0 +1,44 @@
pragma solidity ^0.5.0;
import "../../GSN/Context.sol";
import "../Roles.sol";
contract CapperRole is Context {
using Roles for Roles.Role;
event CapperAdded(address indexed account);
event CapperRemoved(address indexed account);
Roles.Role private _cappers;
constructor () internal {
_addCapper(_msgSender());
}
modifier onlyCapper() {
require(isCapper(_msgSender()), "CapperRole: caller does not have the Capper role");
_;
}
function isCapper(address account) public view returns (bool) {
return _cappers.has(account);
}
function addCapper(address account) public onlyCapper {
_addCapper(account);
}
function renounceCapper() public {
_removeCapper(_msgSender());
}
function _addCapper(address account) internal {
_cappers.add(account);
emit CapperAdded(account);
}
function _removeCapper(address account) internal {
_cappers.remove(account);
emit CapperRemoved(account);
}
}

View File

@ -0,0 +1,44 @@
pragma solidity ^0.5.0;
import "../../GSN/Context.sol";
import "../Roles.sol";
contract MinterRole is Context {
using Roles for Roles.Role;
event MinterAdded(address indexed account);
event MinterRemoved(address indexed account);
Roles.Role private _minters;
constructor () internal {
_addMinter(_msgSender());
}
modifier onlyMinter() {
require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role");
_;
}
function isMinter(address account) public view returns (bool) {
return _minters.has(account);
}
function addMinter(address account) public onlyMinter {
_addMinter(account);
}
function renounceMinter() public {
_removeMinter(_msgSender());
}
function _addMinter(address account) internal {
_minters.add(account);
emit MinterAdded(account);
}
function _removeMinter(address account) internal {
_minters.remove(account);
emit MinterRemoved(account);
}
}

View File

@ -0,0 +1,44 @@
pragma solidity ^0.5.0;
import "../../GSN/Context.sol";
import "../Roles.sol";
contract PauserRole is Context {
using Roles for Roles.Role;
event PauserAdded(address indexed account);
event PauserRemoved(address indexed account);
Roles.Role private _pausers;
constructor () internal {
_addPauser(_msgSender());
}
modifier onlyPauser() {
require(isPauser(_msgSender()), "PauserRole: caller does not have the Pauser role");
_;
}
function isPauser(address account) public view returns (bool) {
return _pausers.has(account);
}
function addPauser(address account) public onlyPauser {
_addPauser(account);
}
function renouncePauser() public {
_removePauser(_msgSender());
}
function _addPauser(address account) internal {
_pausers.add(account);
emit PauserAdded(account);
}
function _removePauser(address account) internal {
_pausers.remove(account);
emit PauserRemoved(account);
}
}

View File

@ -0,0 +1,44 @@
pragma solidity ^0.5.0;
import "../../GSN/Context.sol";
import "../Roles.sol";
contract SignerRole is Context {
using Roles for Roles.Role;
event SignerAdded(address indexed account);
event SignerRemoved(address indexed account);
Roles.Role private _signers;
constructor () internal {
_addSigner(_msgSender());
}
modifier onlySigner() {
require(isSigner(_msgSender()), "SignerRole: caller does not have the Signer role");
_;
}
function isSigner(address account) public view returns (bool) {
return _signers.has(account);
}
function addSigner(address account) public onlySigner {
_addSigner(account);
}
function renounceSigner() public {
_removeSigner(_msgSender());
}
function _addSigner(address account) internal {
_signers.add(account);
emit SignerAdded(account);
}
function _removeSigner(address account) internal {
_signers.remove(account);
emit SignerRemoved(account);
}
}

View File

@ -0,0 +1,48 @@
pragma solidity ^0.5.0;
import "../../GSN/Context.sol";
import "../Roles.sol";
/**
* @title WhitelistAdminRole
* @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
*/
contract WhitelistAdminRole is Context {
using Roles for Roles.Role;
event WhitelistAdminAdded(address indexed account);
event WhitelistAdminRemoved(address indexed account);
Roles.Role private _whitelistAdmins;
constructor () internal {
_addWhitelistAdmin(_msgSender());
}
modifier onlyWhitelistAdmin() {
require(isWhitelistAdmin(_msgSender()), "WhitelistAdminRole: caller does not have the WhitelistAdmin role");
_;
}
function isWhitelistAdmin(address account) public view returns (bool) {
return _whitelistAdmins.has(account);
}
function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
_addWhitelistAdmin(account);
}
function renounceWhitelistAdmin() public {
_removeWhitelistAdmin(_msgSender());
}
function _addWhitelistAdmin(address account) internal {
_whitelistAdmins.add(account);
emit WhitelistAdminAdded(account);
}
function _removeWhitelistAdmin(address account) internal {
_whitelistAdmins.remove(account);
emit WhitelistAdminRemoved(account);
}
}

View File

@ -0,0 +1,51 @@
pragma solidity ^0.5.0;
import "../../GSN/Context.sol";
import "../Roles.sol";
import "./WhitelistAdminRole.sol";
/**
* @title WhitelistedRole
* @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a
* crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove
* it), and not Whitelisteds themselves.
*/
contract WhitelistedRole is Context, WhitelistAdminRole {
using Roles for Roles.Role;
event WhitelistedAdded(address indexed account);
event WhitelistedRemoved(address indexed account);
Roles.Role private _whitelisteds;
modifier onlyWhitelisted() {
require(isWhitelisted(_msgSender()), "WhitelistedRole: caller does not have the Whitelisted role");
_;
}
function isWhitelisted(address account) public view returns (bool) {
return _whitelisteds.has(account);
}
function addWhitelisted(address account) public onlyWhitelistAdmin {
_addWhitelisted(account);
}
function removeWhitelisted(address account) public onlyWhitelistAdmin {
_removeWhitelisted(account);
}
function renounceWhitelisted() public {
_removeWhitelisted(_msgSender());
}
function _addWhitelisted(address account) internal {
_whitelisteds.add(account);
emit WhitelistedAdded(account);
}
function _removeWhitelisted(address account) internal {
_whitelisteds.remove(account);
emit WhitelistedRemoved(account);
}
}

View File

@ -0,0 +1,200 @@
pragma solidity ^0.5.0;
import "../GSN/Context.sol";
import "../token/ERC20/IERC20.sol";
import "../math/SafeMath.sol";
import "../token/ERC20/SafeERC20.sol";
import "../utils/ReentrancyGuard.sol";
/**
* @title Crowdsale
* @dev Crowdsale is a base contract for managing a token crowdsale,
* allowing investors to purchase tokens with ether. This contract implements
* such functionality in its most fundamental form and can be extended to provide additional
* functionality and/or custom behavior.
* The external interface represents the basic interface for purchasing tokens, and conforms
* the base architecture for crowdsales. It is *not* intended to be modified / overridden.
* The internal interface conforms the extensible and modifiable surface of crowdsales. Override
* the methods to add functionality. Consider using 'super' where appropriate to concatenate
* behavior.
*/
contract Crowdsale is Context, ReentrancyGuard {
using SafeMath for uint256;
using SafeERC20 for IERC20;
// The token being sold
IERC20 private _token;
// Address where funds are collected
address payable private _wallet;
// How many token units a buyer gets per wei.
// The rate is the conversion between wei and the smallest and indivisible token unit.
// So, if you are using a rate of 1 with a ERC20Detailed token with 3 decimals called TOK
// 1 wei will give you 1 unit, or 0.001 TOK.
uint256 private _rate;
// Amount of wei raised
uint256 private _weiRaised;
/**
* Event for token purchase logging
* @param purchaser who paid for the tokens
* @param beneficiary who got the tokens
* @param value weis paid for purchase
* @param amount amount of tokens purchased
*/
event TokensPurchased(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
/**
* @param rate Number of token units a buyer gets per wei
* @dev The rate is the conversion between wei and the smallest and indivisible
* token unit. So, if you are using a rate of 1 with a ERC20Detailed token
* with 3 decimals called TOK, 1 wei will give you 1 unit, or 0.001 TOK.
* @param wallet Address where collected funds will be forwarded to
* @param token Address of the token being sold
*/
constructor (uint256 rate, address payable wallet, IERC20 token) public {
require(rate > 0, "Crowdsale: rate is 0");
require(wallet != address(0), "Crowdsale: wallet is the zero address");
require(address(token) != address(0), "Crowdsale: token is the zero address");
_rate = rate;
_wallet = wallet;
_token = token;
}
/**
* @dev fallback function ***DO NOT OVERRIDE***
* Note that other contracts will transfer funds with a base gas stipend
* of 2300, which is not enough to call buyTokens. Consider calling
* buyTokens directly when purchasing tokens from a contract.
*/
function () external payable {
buyTokens(_msgSender());
}
/**
* @return the token being sold.
*/
function token() public view returns (IERC20) {
return _token;
}
/**
* @return the address where funds are collected.
*/
function wallet() public view returns (address payable) {
return _wallet;
}
/**
* @return the number of token units a buyer gets per wei.
*/
function rate() public view returns (uint256) {
return _rate;
}
/**
* @return the amount of wei raised.
*/
function weiRaised() public view returns (uint256) {
return _weiRaised;
}
/**
* @dev low level token purchase ***DO NOT OVERRIDE***
* This function has a non-reentrancy guard, so it shouldn't be called by
* another `nonReentrant` function.
* @param beneficiary Recipient of the token purchase
*/
function buyTokens(address beneficiary) public nonReentrant payable {
uint256 weiAmount = msg.value;
_preValidatePurchase(beneficiary, weiAmount);
// calculate token amount to be created
uint256 tokens = _getTokenAmount(weiAmount);
// update state
_weiRaised = _weiRaised.add(weiAmount);
_processPurchase(beneficiary, tokens);
emit TokensPurchased(_msgSender(), beneficiary, weiAmount, tokens);
_updatePurchasingState(beneficiary, weiAmount);
_forwardFunds();
_postValidatePurchase(beneficiary, weiAmount);
}
/**
* @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met.
* Use `super` in contracts that inherit from Crowdsale to extend their validations.
* Example from CappedCrowdsale.sol's _preValidatePurchase method:
* super._preValidatePurchase(beneficiary, weiAmount);
* require(weiRaised().add(weiAmount) <= cap);
* @param beneficiary Address performing the token purchase
* @param weiAmount Value in wei involved in the purchase
*/
function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view {
require(beneficiary != address(0), "Crowdsale: beneficiary is the zero address");
require(weiAmount != 0, "Crowdsale: weiAmount is 0");
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
}
/**
* @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid
* conditions are not met.
* @param beneficiary Address performing the token purchase
* @param weiAmount Value in wei involved in the purchase
*/
function _postValidatePurchase(address beneficiary, uint256 weiAmount) internal view {
// solhint-disable-previous-line no-empty-blocks
}
/**
* @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends
* its tokens.
* @param beneficiary Address performing the token purchase
* @param tokenAmount Number of tokens to be emitted
*/
function _deliverTokens(address beneficiary, uint256 tokenAmount) internal {
_token.safeTransfer(beneficiary, tokenAmount);
}
/**
* @dev Executed when a purchase has been validated and is ready to be executed. Doesn't necessarily emit/send
* tokens.
* @param beneficiary Address receiving the tokens
* @param tokenAmount Number of tokens to be purchased
*/
function _processPurchase(address beneficiary, uint256 tokenAmount) internal {
_deliverTokens(beneficiary, tokenAmount);
}
/**
* @dev Override for extensions that require an internal state to check for validity (current user contributions,
* etc.)
* @param beneficiary Address receiving the tokens
* @param weiAmount Value in wei involved in the purchase
*/
function _updatePurchasingState(address beneficiary, uint256 weiAmount) internal {
// solhint-disable-previous-line no-empty-blocks
}
/**
* @dev Override to extend the way in which ether is converted to tokens.
* @param weiAmount Value in wei to be converted into tokens
* @return Number of tokens that can be purchased with the specified _weiAmount
*/
function _getTokenAmount(uint256 weiAmount) internal view returns (uint256) {
return weiAmount.mul(_rate);
}
/**
* @dev Determines how ETH is stored/forwarded on purchases.
*/
function _forwardFunds() internal {
_wallet.transfer(msg.value);
}
}

View File

@ -0,0 +1,35 @@
= Crowdsales
NOTE: This page is incomplete. We're working to improve it for the next release. Stay tuned!
== Core
{{Crowdsale}}
== Emission
{{AllowanceCrowdsale}}
{{MintedCrowdsale}}
== Validation
{{CappedCrowdsale}}
{{IndividuallyCappedCrowdsale}}
{{PausableCrowdsale}}
{{TimedCrowdsale}}
{{WhitelistCrowdsale}}
== Distribution
{{FinalizableCrowdsale}}
{{PostDeliveryCrowdsale}}
{{RefundableCrowdsale}}
{{RefundablePostDeliveryCrowdsale}}

View File

@ -0,0 +1,51 @@
pragma solidity ^0.5.0;
import "../../math/SafeMath.sol";
import "../validation/TimedCrowdsale.sol";
/**
* @title FinalizableCrowdsale
* @dev Extension of TimedCrowdsale with a one-off finalization action, where one
* can do extra work after finishing.
*/
contract FinalizableCrowdsale is TimedCrowdsale {
using SafeMath for uint256;
bool private _finalized;
event CrowdsaleFinalized();
constructor () internal {
_finalized = false;
}
/**
* @return true if the crowdsale is finalized, false otherwise.
*/
function finalized() public view returns (bool) {
return _finalized;
}
/**
* @dev Must be called after crowdsale ends, to do some extra finalization
* work. Calls the contract's finalization function.
*/
function finalize() public {
require(!_finalized, "FinalizableCrowdsale: already finalized");
require(hasClosed(), "FinalizableCrowdsale: not closed");
_finalized = true;
_finalization();
emit CrowdsaleFinalized();
}
/**
* @dev Can be overridden to add finalization logic. The overriding function
* should call super._finalization() to ensure the chain of finalization is
* executed entirely.
*/
function _finalization() internal {
// solhint-disable-previous-line no-empty-blocks
}
}

View File

@ -0,0 +1,65 @@
pragma solidity ^0.5.0;
import "../validation/TimedCrowdsale.sol";
import "../../math/SafeMath.sol";
import "../../ownership/Secondary.sol";
import "../../token/ERC20/IERC20.sol";
/**
* @title PostDeliveryCrowdsale
* @dev Crowdsale that locks tokens from withdrawal until it ends.
*/
contract PostDeliveryCrowdsale is TimedCrowdsale {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
__unstable__TokenVault private _vault;
constructor() public {
_vault = new __unstable__TokenVault();
}
/**
* @dev Withdraw tokens only after crowdsale ends.
* @param beneficiary Whose tokens will be withdrawn.
*/
function withdrawTokens(address beneficiary) public {
require(hasClosed(), "PostDeliveryCrowdsale: not closed");
uint256 amount = _balances[beneficiary];
require(amount > 0, "PostDeliveryCrowdsale: beneficiary is not due any tokens");
_balances[beneficiary] = 0;
_vault.transfer(token(), beneficiary, amount);
}
/**
* @return the balance of an account.
*/
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
/**
* @dev Overrides parent by storing due balances, and delivering tokens to the vault instead of the end user. This
* ensures that the tokens will be available by the time they are withdrawn (which may not be the case if
* `_deliverTokens` was called later).
* @param beneficiary Token purchaser
* @param tokenAmount Amount of tokens purchased
*/
function _processPurchase(address beneficiary, uint256 tokenAmount) internal {
_balances[beneficiary] = _balances[beneficiary].add(tokenAmount);
_deliverTokens(address(_vault), tokenAmount);
}
}
/**
* @title __unstable__TokenVault
* @dev Similar to an Escrow for tokens, this contract allows its primary account to spend its tokens as it sees fit.
* This contract is an internal helper for PostDeliveryCrowdsale, and should not be used outside of this context.
*/
// solhint-disable-next-line contract-name-camelcase
contract __unstable__TokenVault is Secondary {
function transfer(IERC20 token, address to, uint256 amount) public onlyPrimary {
token.transfer(to, amount);
}
}

View File

@ -0,0 +1,83 @@
pragma solidity ^0.5.0;
import "../../GSN/Context.sol";
import "../../math/SafeMath.sol";
import "./FinalizableCrowdsale.sol";
import "../../payment/escrow/RefundEscrow.sol";
/**
* @title RefundableCrowdsale
* @dev Extension of `FinalizableCrowdsale` contract that adds a funding goal, and the possibility of users
* getting a refund if goal is not met.
*
* Deprecated, use `RefundablePostDeliveryCrowdsale` instead. Note that if you allow tokens to be traded before the goal
* is met, then an attack is possible in which the attacker purchases tokens from the crowdsale and when they sees that
* the goal is unlikely to be met, they sell their tokens (possibly at a discount). The attacker will be refunded when
* the crowdsale is finalized, and the users that purchased from them will be left with worthless tokens.
*/
contract RefundableCrowdsale is Context, FinalizableCrowdsale {
using SafeMath for uint256;
// minimum amount of funds to be raised in weis
uint256 private _goal;
// refund escrow used to hold funds while crowdsale is running
RefundEscrow private _escrow;
/**
* @dev Constructor, creates RefundEscrow.
* @param goal Funding goal
*/
constructor (uint256 goal) public {
require(goal > 0, "RefundableCrowdsale: goal is 0");
_escrow = new RefundEscrow(wallet());
_goal = goal;
}
/**
* @return minimum amount of funds to be raised in wei.
*/
function goal() public view returns (uint256) {
return _goal;
}
/**
* @dev Investors can claim refunds here if crowdsale is unsuccessful.
* @param refundee Whose refund will be claimed.
*/
function claimRefund(address payable refundee) public {
require(finalized(), "RefundableCrowdsale: not finalized");
require(!goalReached(), "RefundableCrowdsale: goal reached");
_escrow.withdraw(refundee);
}
/**
* @dev Checks whether funding goal was reached.
* @return Whether funding goal was reached
*/
function goalReached() public view returns (bool) {
return weiRaised() >= _goal;
}
/**
* @dev Escrow finalization task, called when finalize() is called.
*/
function _finalization() internal {
if (goalReached()) {
_escrow.close();
_escrow.beneficiaryWithdraw();
} else {
_escrow.enableRefunds();
}
super._finalization();
}
/**
* @dev Overrides Crowdsale fund forwarding, sending funds to escrow.
*/
function _forwardFunds() internal {
_escrow.deposit.value(msg.value)(_msgSender());
}
}

View File

@ -0,0 +1,20 @@
pragma solidity ^0.5.0;
import "./RefundableCrowdsale.sol";
import "./PostDeliveryCrowdsale.sol";
/**
* @title RefundablePostDeliveryCrowdsale
* @dev Extension of RefundableCrowdsale contract that only delivers the tokens
* once the crowdsale has closed and the goal met, preventing refunds to be issued
* to token holders.
*/
contract RefundablePostDeliveryCrowdsale is RefundableCrowdsale, PostDeliveryCrowdsale {
function withdrawTokens(address beneficiary) public {
require(finalized(), "RefundablePostDeliveryCrowdsale: not finalized");
require(goalReached(), "RefundablePostDeliveryCrowdsale: goal not reached");
super.withdrawTokens(beneficiary);
}
}

View File

@ -0,0 +1,51 @@
pragma solidity ^0.5.0;
import "../Crowdsale.sol";
import "../../token/ERC20/IERC20.sol";
import "../../token/ERC20/SafeERC20.sol";
import "../../math/SafeMath.sol";
import "../../math/Math.sol";
/**
* @title AllowanceCrowdsale
* @dev Extension of Crowdsale where tokens are held by a wallet, which approves an allowance to the crowdsale.
*/
contract AllowanceCrowdsale is Crowdsale {
using SafeMath for uint256;
using SafeERC20 for IERC20;
address private _tokenWallet;
/**
* @dev Constructor, takes token wallet address.
* @param tokenWallet Address holding the tokens, which has approved allowance to the crowdsale.
*/
constructor (address tokenWallet) public {
require(tokenWallet != address(0), "AllowanceCrowdsale: token wallet is the zero address");
_tokenWallet = tokenWallet;
}
/**
* @return the address of the wallet that will hold the tokens.
*/
function tokenWallet() public view returns (address) {
return _tokenWallet;
}
/**
* @dev Checks the amount of tokens left in the allowance.
* @return Amount of tokens left in the allowance
*/
function remainingTokens() public view returns (uint256) {
return Math.min(token().balanceOf(_tokenWallet), token().allowance(_tokenWallet, address(this)));
}
/**
* @dev Overrides parent behavior by transferring tokens from wallet.
* @param beneficiary Token purchaser
* @param tokenAmount Amount of tokens purchased
*/
function _deliverTokens(address beneficiary, uint256 tokenAmount) internal {
token().safeTransferFrom(_tokenWallet, beneficiary, tokenAmount);
}
}

View File

@ -0,0 +1,24 @@
pragma solidity ^0.5.0;
import "../Crowdsale.sol";
import "../../token/ERC20/ERC20Mintable.sol";
/**
* @title MintedCrowdsale
* @dev Extension of Crowdsale contract whose tokens are minted in each purchase.
* Token ownership should be transferred to MintedCrowdsale for minting.
*/
contract MintedCrowdsale is Crowdsale {
/**
* @dev Overrides delivery by minting tokens upon purchase.
* @param beneficiary Token purchaser
* @param tokenAmount Number of tokens to be minted
*/
function _deliverTokens(address beneficiary, uint256 tokenAmount) internal {
// Potentially dangerous assumption about the type of the token.
require(
ERC20Mintable(address(token())).mint(beneficiary, tokenAmount),
"MintedCrowdsale: minting failed"
);
}
}

View File

@ -0,0 +1,79 @@
pragma solidity ^0.5.0;
import "../validation/TimedCrowdsale.sol";
import "../../math/SafeMath.sol";
/**
* @title IncreasingPriceCrowdsale
* @dev Extension of Crowdsale contract that increases the price of tokens linearly in time.
* Note that what should be provided to the constructor is the initial and final _rates_, that is,
* the amount of tokens per wei contributed. Thus, the initial rate must be greater than the final rate.
*/
contract IncreasingPriceCrowdsale is TimedCrowdsale {
using SafeMath for uint256;
uint256 private _initialRate;
uint256 private _finalRate;
/**
* @dev Constructor, takes initial and final rates of tokens received per wei contributed.
* @param initialRate Number of tokens a buyer gets per wei at the start of the crowdsale
* @param finalRate Number of tokens a buyer gets per wei at the end of the crowdsale
*/
constructor (uint256 initialRate, uint256 finalRate) public {
require(finalRate > 0, "IncreasingPriceCrowdsale: final rate is 0");
// solhint-disable-next-line max-line-length
require(initialRate > finalRate, "IncreasingPriceCrowdsale: initial rate is not greater than final rate");
_initialRate = initialRate;
_finalRate = finalRate;
}
/**
* The base rate function is overridden to revert, since this crowdsale doesn't use it, and
* all calls to it are a mistake.
*/
function rate() public view returns (uint256) {
revert("IncreasingPriceCrowdsale: rate() called");
}
/**
* @return the initial rate of the crowdsale.
*/
function initialRate() public view returns (uint256) {
return _initialRate;
}
/**
* @return the final rate of the crowdsale.
*/
function finalRate() public view returns (uint256) {
return _finalRate;
}
/**
* @dev Returns the rate of tokens per wei at the present time.
* Note that, as price _increases_ with time, the rate _decreases_.
* @return The number of tokens a buyer gets per wei at a given time
*/
function getCurrentRate() public view returns (uint256) {
if (!isOpen()) {
return 0;
}
// solhint-disable-next-line not-rely-on-time
uint256 elapsedTime = block.timestamp.sub(openingTime());
uint256 timeRange = closingTime().sub(openingTime());
uint256 rateRange = _initialRate.sub(_finalRate);
return _initialRate.sub(elapsedTime.mul(rateRange).div(timeRange));
}
/**
* @dev Overrides parent method taking into account variable rate.
* @param weiAmount The value in wei to be converted into tokens
* @return The number of tokens _weiAmount wei will buy at present time
*/
function _getTokenAmount(uint256 weiAmount) internal view returns (uint256) {
uint256 currentRate = getCurrentRate();
return currentRate.mul(weiAmount);
}
}

View File

@ -0,0 +1,48 @@
pragma solidity ^0.5.0;
import "../../math/SafeMath.sol";
import "../Crowdsale.sol";
/**
* @title CappedCrowdsale
* @dev Crowdsale with a limit for total contributions.
*/
contract CappedCrowdsale is Crowdsale {
using SafeMath for uint256;
uint256 private _cap;
/**
* @dev Constructor, takes maximum amount of wei accepted in the crowdsale.
* @param cap Max amount of wei to be contributed
*/
constructor (uint256 cap) public {
require(cap > 0, "CappedCrowdsale: cap is 0");
_cap = cap;
}
/**
* @return the cap of the crowdsale.
*/
function cap() public view returns (uint256) {
return _cap;
}
/**
* @dev Checks whether the cap has been reached.
* @return Whether the cap was reached
*/
function capReached() public view returns (bool) {
return weiRaised() >= _cap;
}
/**
* @dev Extend parent behavior requiring purchase to respect the funding cap.
* @param beneficiary Token purchaser
* @param weiAmount Amount of wei contributed
*/
function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view {
super._preValidatePurchase(beneficiary, weiAmount);
require(weiRaised().add(weiAmount) <= _cap, "CappedCrowdsale: cap exceeded");
}
}

View File

@ -0,0 +1,64 @@
pragma solidity ^0.5.0;
import "../../math/SafeMath.sol";
import "../Crowdsale.sol";
import "../../access/roles/CapperRole.sol";
/**
* @title IndividuallyCappedCrowdsale
* @dev Crowdsale with per-beneficiary caps.
*/
contract IndividuallyCappedCrowdsale is Crowdsale, CapperRole {
using SafeMath for uint256;
mapping(address => uint256) private _contributions;
mapping(address => uint256) private _caps;
/**
* @dev Sets a specific beneficiary's maximum contribution.
* @param beneficiary Address to be capped
* @param cap Wei limit for individual contribution
*/
function setCap(address beneficiary, uint256 cap) external onlyCapper {
_caps[beneficiary] = cap;
}
/**
* @dev Returns the cap of a specific beneficiary.
* @param beneficiary Address whose cap is to be checked
* @return Current cap for individual beneficiary
*/
function getCap(address beneficiary) public view returns (uint256) {
return _caps[beneficiary];
}
/**
* @dev Returns the amount contributed so far by a specific beneficiary.
* @param beneficiary Address of contributor
* @return Beneficiary contribution so far
*/
function getContribution(address beneficiary) public view returns (uint256) {
return _contributions[beneficiary];
}
/**
* @dev Extend parent behavior requiring purchase to respect the beneficiary's funding cap.
* @param beneficiary Token purchaser
* @param weiAmount Amount of wei contributed
*/
function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view {
super._preValidatePurchase(beneficiary, weiAmount);
// solhint-disable-next-line max-line-length
require(_contributions[beneficiary].add(weiAmount) <= _caps[beneficiary], "IndividuallyCappedCrowdsale: beneficiary's cap exceeded");
}
/**
* @dev Extend parent behavior to update beneficiary contributions.
* @param beneficiary Token purchaser
* @param weiAmount Amount of wei contributed
*/
function _updatePurchasingState(address beneficiary, uint256 weiAmount) internal {
super._updatePurchasingState(beneficiary, weiAmount);
_contributions[beneficiary] = _contributions[beneficiary].add(weiAmount);
}
}

View File

@ -0,0 +1,21 @@
pragma solidity ^0.5.0;
import "../Crowdsale.sol";
import "../../lifecycle/Pausable.sol";
/**
* @title PausableCrowdsale
* @dev Extension of Crowdsale contract where purchases can be paused and unpaused by the pauser role.
*/
contract PausableCrowdsale is Crowdsale, Pausable {
/**
* @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met.
* Use super to concatenate validations.
* Adds the validation that the crowdsale must not be paused.
* @param _beneficiary Address performing the token purchase
* @param _weiAmount Value in wei involved in the purchase
*/
function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal view whenNotPaused {
return super._preValidatePurchase(_beneficiary, _weiAmount);
}
}

View File

@ -0,0 +1,98 @@
pragma solidity ^0.5.0;
import "../../math/SafeMath.sol";
import "../Crowdsale.sol";
/**
* @title TimedCrowdsale
* @dev Crowdsale accepting contributions only within a time frame.
*/
contract TimedCrowdsale is Crowdsale {
using SafeMath for uint256;
uint256 private _openingTime;
uint256 private _closingTime;
/**
* Event for crowdsale extending
* @param newClosingTime new closing time
* @param prevClosingTime old closing time
*/
event TimedCrowdsaleExtended(uint256 prevClosingTime, uint256 newClosingTime);
/**
* @dev Reverts if not in crowdsale time range.
*/
modifier onlyWhileOpen {
require(isOpen(), "TimedCrowdsale: not open");
_;
}
/**
* @dev Constructor, takes crowdsale opening and closing times.
* @param openingTime Crowdsale opening time
* @param closingTime Crowdsale closing time
*/
constructor (uint256 openingTime, uint256 closingTime) public {
// solhint-disable-next-line not-rely-on-time
require(openingTime >= block.timestamp, "TimedCrowdsale: opening time is before current time");
// solhint-disable-next-line max-line-length
require(closingTime > openingTime, "TimedCrowdsale: opening time is not before closing time");
_openingTime = openingTime;
_closingTime = closingTime;
}
/**
* @return the crowdsale opening time.
*/
function openingTime() public view returns (uint256) {
return _openingTime;
}
/**
* @return the crowdsale closing time.
*/
function closingTime() public view returns (uint256) {
return _closingTime;
}
/**
* @return true if the crowdsale is open, false otherwise.
*/
function isOpen() public view returns (bool) {
// solhint-disable-next-line not-rely-on-time
return block.timestamp >= _openingTime && block.timestamp <= _closingTime;
}
/**
* @dev Checks whether the period in which the crowdsale is open has already elapsed.
* @return Whether crowdsale period has elapsed
*/
function hasClosed() public view returns (bool) {
// solhint-disable-next-line not-rely-on-time
return block.timestamp > _closingTime;
}
/**
* @dev Extend parent behavior requiring to be within contributing period.
* @param beneficiary Token purchaser
* @param weiAmount Amount of wei contributed
*/
function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal onlyWhileOpen view {
super._preValidatePurchase(beneficiary, weiAmount);
}
/**
* @dev Extend crowdsale.
* @param newClosingTime Crowdsale closing time
*/
function _extendTime(uint256 newClosingTime) internal {
require(!hasClosed(), "TimedCrowdsale: already closed");
// solhint-disable-next-line max-line-length
require(newClosingTime > _closingTime, "TimedCrowdsale: new closing time is before current closing time");
emit TimedCrowdsaleExtended(_closingTime, newClosingTime);
_closingTime = newClosingTime;
}
}

View File

@ -0,0 +1,21 @@
pragma solidity ^0.5.0;
import "../Crowdsale.sol";
import "../../access/roles/WhitelistedRole.sol";
/**
* @title WhitelistCrowdsale
* @dev Crowdsale in which only whitelisted users can contribute.
*/
contract WhitelistCrowdsale is WhitelistedRole, Crowdsale {
/**
* @dev Extend parent behavior requiring beneficiary to be whitelisted. Note that no
* restriction is imposed on the account sending the transaction.
* @param _beneficiary Token beneficiary
* @param _weiAmount Amount of wei contributed
*/
function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal view {
require(isWhitelisted(_beneficiary), "WhitelistCrowdsale: beneficiary doesn't have the Whitelisted role");
super._preValidatePurchase(_beneficiary, _weiAmount);
}
}

View File

@ -0,0 +1,82 @@
pragma solidity ^0.5.0;
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* NOTE: This call _does not revert_ if the signature is invalid, or
* if the signer is otherwise unable to be retrieved. In those scenarios,
* the zero address is returned.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {toEthSignedMessageHash} on it.
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
// Check the signature length
if (signature.length != 65) {
return (address(0));
}
// Divide the signature in r, s and v variables
bytes32 r;
bytes32 s;
uint8 v;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
// solhint-disable-next-line no-inline-assembly
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
// EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
// unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
// the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
// signatures from current libraries generate a unique signature with an s-value in the lower half order.
//
// If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
// with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
// vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
// these malleable signatures as well.
if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
return address(0);
}
if (v != 27 && v != 28) {
return address(0);
}
// If the signature is valid (and not malleable), return the signer address
return ecrecover(hash, v, r, s);
}
/**
* @dev Returns an Ethereum Signed Message, created from a `hash`. This
* replicates the behavior of the
* https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]
* JSON-RPC method.
*
* See {recover}.
*/
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
// 32 is the length in bytes of hash,
// enforced by the type signature above
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
}

View File

@ -0,0 +1,31 @@
pragma solidity ^0.5.0;
/**
* @dev These functions deal with verification of Merkle trees (hash trees),
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof)
computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
} else {
// Hash(current element of the proof + current computed hash)
computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
}
}
// Check if the computed hash (root) is equal to the provided root
return computedHash == root;
}
}

View File

@ -0,0 +1,9 @@
= Cryptography
This collection of libraries provides simple and safe ways to use different cryptographic primitives.
== Libraries
{{ECDSA}}
{{MerkleProof}}

View File

@ -0,0 +1,38 @@
pragma solidity ^0.5.0;
import "../math/SafeMath.sol";
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
* Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}
* overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
* directly accessed.
*/
library Counters {
using SafeMath for uint256;
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
// The {SafeMath} overflow check can be skipped here, see the comment at the top
counter._value += 1;
}
function decrement(Counter storage counter) internal {
counter._value = counter._value.sub(1);
}
}

View File

@ -0,0 +1,24 @@
pragma solidity ^0.5.0;
import "../../token/ERC20/IERC20.sol";
/**
* @title ERC-1047 Token Metadata
* @dev See https://eips.ethereum.org/EIPS/eip-1046
* @dev {tokenURI} must respond with a URI that implements https://eips.ethereum.org/EIPS/eip-1047
*/
contract ERC20Metadata {
string private _tokenURI;
constructor (string memory tokenURI_) public {
_setTokenURI(tokenURI_);
}
function tokenURI() external view returns (string memory) {
return _tokenURI;
}
function _setTokenURI(string memory tokenURI_) internal {
_tokenURI = tokenURI_;
}
}

View File

@ -0,0 +1,103 @@
pragma solidity ^0.5.0;
import "../token/ERC20/IERC20.sol";
import "../token/ERC20/ERC20Mintable.sol";
import "../token/ERC20/SafeERC20.sol";
import "../math/Math.sol";
/**
* @title ERC20Migrator
* @dev This contract can be used to migrate an ERC20 token from one
* contract to another, where each token holder has to opt-in to the migration.
* To opt-in, users must approve for this contract the number of tokens they
* want to migrate. Once the allowance is set up, anyone can trigger the
* migration to the new token contract. In this way, token holders "turn in"
* their old balance and will be minted an equal amount in the new token.
* The new token contract must be mintable. For the precise interface refer to
* OpenZeppelin's {ERC20Mintable}, but the only functions that are needed are
* {MinterRole-isMinter} and {ERC20Mintable-mint}. The migrator will check
* that it is a minter for the token.
* The balance from the legacy token will be transferred to the migrator, as it
* is migrated, and remain there forever.
* Although this contract can be used in many different scenarios, the main
* motivation was to provide a way to migrate ERC20 tokens into an upgradeable
* version of it using ZeppelinOS. To read more about how this can be done
* using this implementation, please follow the official documentation site of
* ZeppelinOS: https://docs.zeppelinos.org/docs/erc20_onboarding.html
*
* Example of usage:
* ```
* const migrator = await ERC20Migrator.new(legacyToken.address);
* await newToken.addMinter(migrator.address);
* await migrator.beginMigration(newToken.address);
* ```
*/
contract ERC20Migrator {
using SafeERC20 for IERC20;
/// Address of the old token contract
IERC20 private _legacyToken;
/// Address of the new token contract
ERC20Mintable private _newToken;
/**
* @param legacyToken address of the old token contract
*/
constructor (IERC20 legacyToken) public {
require(address(legacyToken) != address(0), "ERC20Migrator: legacy token is the zero address");
_legacyToken = legacyToken;
}
/**
* @dev Returns the legacy token that is being migrated.
*/
function legacyToken() public view returns (IERC20) {
return _legacyToken;
}
/**
* @dev Returns the new token to which we are migrating.
*/
function newToken() public view returns (IERC20) {
return _newToken;
}
/**
* @dev Begins the migration by setting which is the new token that will be
* minted. This contract must be a minter for the new token.
* @param newToken_ the token that will be minted
*/
function beginMigration(ERC20Mintable newToken_) public {
require(address(_newToken) == address(0), "ERC20Migrator: migration already started");
require(address(newToken_) != address(0), "ERC20Migrator: new token is the zero address");
//solhint-disable-next-line max-line-length
require(newToken_.isMinter(address(this)), "ERC20Migrator: not a minter for new token");
_newToken = newToken_;
}
/**
* @dev Transfers part of an account's balance in the old token to this
* contract, and mints the same amount of new tokens for that account.
* @param account whose tokens will be migrated
* @param amount amount of tokens to be migrated
*/
function migrate(address account, uint256 amount) public {
require(address(_newToken) != address(0), "ERC20Migrator: migration not started");
_legacyToken.safeTransferFrom(account, address(this), amount);
_newToken.mint(account, amount);
}
/**
* @dev Transfers all of an account's allowed balance in the old token to
* this contract, and mints the same amount of new tokens for that account.
* @param account whose tokens will be migrated
*/
function migrateAll(address account) public {
uint256 balance = _legacyToken.balanceOf(account);
uint256 allowance = _legacyToken.allowance(account, address(this));
uint256 amount = Math.min(balance, allowance);
migrate(account, amount);
}
}

View File

@ -0,0 +1,142 @@
pragma solidity ^0.5.0;
import "../math/SafeMath.sol";
import "../utils/Arrays.sol";
import "../drafts/Counters.sol";
import "../token/ERC20/ERC20.sol";
/**
* @title ERC20 token with snapshots.
* @dev Inspired by Jordi Baylina's
* https://github.com/Giveth/minimd/blob/ea04d950eea153a04c51fa510b068b9dded390cb/contracts/MiniMeToken.sol[MiniMeToken]
* to record historical balances.
*
* When a snapshot is made, the balances and total supply at the time of the snapshot are recorded for later
* access.
*
* To make a snapshot, call the {snapshot} function, which will emit the {Snapshot} event and return a snapshot id.
* To get the total supply from a snapshot, call the function {totalSupplyAt} with the snapshot id.
* To get the balance of an account from a snapshot, call the {balanceOfAt} function with the snapshot id and the
* account address.
* @author Validity Labs AG <info@validitylabs.org>
*/
contract ERC20Snapshot is ERC20 {
using SafeMath for uint256;
using Arrays for uint256[];
using Counters for Counters.Counter;
// Snapshotted values have arrays of ids and the value corresponding to that id. These could be an array of a
// Snapshot struct, but that would impede usage of functions that work on an array.
struct Snapshots {
uint256[] ids;
uint256[] values;
}
mapping (address => Snapshots) private _accountBalanceSnapshots;
Snapshots private _totalSupplySnapshots;
// Snapshot ids increase monotonically, with the first value being 1. An id of 0 is invalid.
Counters.Counter private _currentSnapshotId;
event Snapshot(uint256 id);
// Creates a new snapshot id. Balances are only stored in snapshots on demand: unless a snapshot was taken, a
// balance change will not be recorded. This means the extra added cost of storing snapshotted balances is only paid
// when required, but is also flexible enough that it allows for e.g. daily snapshots.
function snapshot() public returns (uint256) {
_currentSnapshotId.increment();
uint256 currentId = _currentSnapshotId.current();
emit Snapshot(currentId);
return currentId;
}
function balanceOfAt(address account, uint256 snapshotId) public view returns (uint256) {
(bool snapshotted, uint256 value) = _valueAt(snapshotId, _accountBalanceSnapshots[account]);
return snapshotted ? value : balanceOf(account);
}
function totalSupplyAt(uint256 snapshotId) public view returns(uint256) {
(bool snapshotted, uint256 value) = _valueAt(snapshotId, _totalSupplySnapshots);
return snapshotted ? value : totalSupply();
}
// _transfer, _mint and _burn are the only functions where the balances are modified, so it is there that the
// snapshots are updated. Note that the update happens _before_ the balance change, with the pre-modified value.
// The same is true for the total supply and _mint and _burn.
function _transfer(address from, address to, uint256 value) internal {
_updateAccountSnapshot(from);
_updateAccountSnapshot(to);
super._transfer(from, to, value);
}
function _mint(address account, uint256 value) internal {
_updateAccountSnapshot(account);
_updateTotalSupplySnapshot();
super._mint(account, value);
}
function _burn(address account, uint256 value) internal {
_updateAccountSnapshot(account);
_updateTotalSupplySnapshot();
super._burn(account, value);
}
// When a valid snapshot is queried, there are three possibilities:
// a) The queried value was not modified after the snapshot was taken. Therefore, a snapshot entry was never
// created for this id, and all stored snapshot ids are smaller than the requested one. The value that corresponds
// to this id is the current one.
// b) The queried value was modified after the snapshot was taken. Therefore, there will be an entry with the
// requested id, and its value is the one to return.
// c) More snapshots were created after the requested one, and the queried value was later modified. There will be
// no entry for the requested id: the value that corresponds to it is that of the smallest snapshot id that is
// larger than the requested one.
//
// In summary, we need to find an element in an array, returning the index of the smallest value that is larger if
// it is not found, unless said value doesn't exist (e.g. when all values are smaller). Arrays.findUpperBound does
// exactly this.
function _valueAt(uint256 snapshotId, Snapshots storage snapshots)
private view returns (bool, uint256)
{
require(snapshotId > 0, "ERC20Snapshot: id is 0");
// solhint-disable-next-line max-line-length
require(snapshotId <= _currentSnapshotId.current(), "ERC20Snapshot: nonexistent id");
uint256 index = snapshots.ids.findUpperBound(snapshotId);
if (index == snapshots.ids.length) {
return (false, 0);
} else {
return (true, snapshots.values[index]);
}
}
function _updateAccountSnapshot(address account) private {
_updateSnapshot(_accountBalanceSnapshots[account], balanceOf(account));
}
function _updateTotalSupplySnapshot() private {
_updateSnapshot(_totalSupplySnapshots, totalSupply());
}
function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) private {
uint256 currentId = _currentSnapshotId.current();
if (_lastSnapshotId(snapshots.ids) < currentId) {
snapshots.ids.push(currentId);
snapshots.values.push(currentValue);
}
}
function _lastSnapshotId(uint256[] storage ids) private view returns (uint256) {
if (ids.length == 0) {
return 0;
} else {
return ids[ids.length - 1];
}
}
}

View File

@ -0,0 +1,23 @@
= Drafts
Contracts in this category should be considered unstable. They are as thoroughly reviewed as everything else in OpenZeppelin Contracts, but we have doubts about their API so we don't commit to backwards compatibility. This means these contracts can receive breaking changes in a minor version, so you should pay special attention to the changelog when upgrading. For anything that is outside of this category you can read more about xref:ROOT:api-stability.adoc[API Stability].
NOTE: This page is incomplete. We're working to improve it for the next release. Stay tuned!
== ERC 20
{{ERC20Migrator}}
{{ERC20Snapshot}}
{{TokenVesting}}
== Miscellaneous
{{Counters}}
{{SignedSafeMath}}
== ERC 1046
{{ERC1046}}

View File

@ -0,0 +1,60 @@
pragma solidity ^0.5.0;
/**
* @title SignedSafeMath
* @dev Signed math operations with safety checks that revert on error.
*/
library SignedSafeMath {
int256 constant private INT256_MIN = -2**255;
/**
* @dev Multiplies two signed integers, reverts on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
require(!(a == -1 && b == INT256_MIN), "SignedSafeMath: multiplication overflow");
int256 c = a * b;
require(c / a == b, "SignedSafeMath: multiplication overflow");
return c;
}
/**
* @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
require(b != 0, "SignedSafeMath: division by zero");
require(!(b == -1 && a == INT256_MIN), "SignedSafeMath: division overflow");
int256 c = a / b;
return c;
}
/**
* @dev Subtracts two signed integers, reverts on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow");
return c;
}
/**
* @dev Adds two signed integers, reverts on overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow");
return c;
}
}

View File

@ -0,0 +1,32 @@
pragma solidity ^0.5.0;
/**
* @title Strings
* @dev String operations.
*/
library Strings {
/**
* @dev Converts a `uint256` to a `string`.
* via OraclizeAPI - MIT licence
* https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
*/
function fromUint256(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
uint256 index = digits - 1;
temp = value;
while (temp != 0) {
buffer[index--] = byte(uint8(48 + temp % 10));
temp /= 10;
}
return string(buffer);
}
}

View File

@ -0,0 +1,174 @@
pragma solidity ^0.5.0;
import "../token/ERC20/SafeERC20.sol";
import "../ownership/Ownable.sol";
import "../math/SafeMath.sol";
/**
* @title TokenVesting
* @dev A token holder contract that can release its token balance gradually like a
* typical vesting scheme, with a cliff and vesting period. Optionally revocable by the
* owner.
*/
contract TokenVesting is Ownable {
// The vesting schedule is time-based (i.e. using block timestamps as opposed to e.g. block numbers), and is
// therefore sensitive to timestamp manipulation (which is something miners can do, to a certain degree). Therefore,
// it is recommended to avoid using short time durations (less than a minute). Typical vesting schemes, with a
// cliff period of a year and a duration of four years, are safe to use.
// solhint-disable not-rely-on-time
using SafeMath for uint256;
using SafeERC20 for IERC20;
event TokensReleased(address token, uint256 amount);
event TokenVestingRevoked(address token);
// beneficiary of tokens after they are released
address private _beneficiary;
// Durations and timestamps are expressed in UNIX time, the same units as block.timestamp.
uint256 private _cliff;
uint256 private _start;
uint256 private _duration;
bool private _revocable;
mapping (address => uint256) private _released;
mapping (address => bool) private _revoked;
/**
* @dev Creates a vesting contract that vests its balance of any ERC20 token to the
* beneficiary, gradually in a linear fashion until start + duration. By then all
* of the balance will have vested.
* @param beneficiary address of the beneficiary to whom vested tokens are transferred
* @param cliffDuration duration in seconds of the cliff in which tokens will begin to vest
* @param start the time (as Unix time) at which point vesting starts
* @param duration duration in seconds of the period in which the tokens will vest
* @param revocable whether the vesting is revocable or not
*/
constructor (address beneficiary, uint256 start, uint256 cliffDuration, uint256 duration, bool revocable) public {
require(beneficiary != address(0), "TokenVesting: beneficiary is the zero address");
// solhint-disable-next-line max-line-length
require(cliffDuration <= duration, "TokenVesting: cliff is longer than duration");
require(duration > 0, "TokenVesting: duration is 0");
// solhint-disable-next-line max-line-length
require(start.add(duration) > block.timestamp, "TokenVesting: final time is before current time");
_beneficiary = beneficiary;
_revocable = revocable;
_duration = duration;
_cliff = start.add(cliffDuration);
_start = start;
}
/**
* @return the beneficiary of the tokens.
*/
function beneficiary() public view returns (address) {
return _beneficiary;
}
/**
* @return the cliff time of the token vesting.
*/
function cliff() public view returns (uint256) {
return _cliff;
}
/**
* @return the start time of the token vesting.
*/
function start() public view returns (uint256) {
return _start;
}
/**
* @return the duration of the token vesting.
*/
function duration() public view returns (uint256) {
return _duration;
}
/**
* @return true if the vesting is revocable.
*/
function revocable() public view returns (bool) {
return _revocable;
}
/**
* @return the amount of the token released.
*/
function released(address token) public view returns (uint256) {
return _released[token];
}
/**
* @return true if the token is revoked.
*/
function revoked(address token) public view returns (bool) {
return _revoked[token];
}
/**
* @notice Transfers vested tokens to beneficiary.
* @param token ERC20 token which is being vested
*/
function release(IERC20 token) public {
uint256 unreleased = _releasableAmount(token);
require(unreleased > 0, "TokenVesting: no tokens are due");
_released[address(token)] = _released[address(token)].add(unreleased);
token.safeTransfer(_beneficiary, unreleased);
emit TokensReleased(address(token), unreleased);
}
/**
* @notice Allows the owner to revoke the vesting. Tokens already vested
* remain in the contract, the rest are returned to the owner.
* @param token ERC20 token which is being vested
*/
function revoke(IERC20 token) public onlyOwner {
require(_revocable, "TokenVesting: cannot revoke");
require(!_revoked[address(token)], "TokenVesting: token already revoked");
uint256 balance = token.balanceOf(address(this));
uint256 unreleased = _releasableAmount(token);
uint256 refund = balance.sub(unreleased);
_revoked[address(token)] = true;
token.safeTransfer(owner(), refund);
emit TokenVestingRevoked(address(token));
}
/**
* @dev Calculates the amount that has already vested but hasn't been released yet.
* @param token ERC20 token which is being vested
*/
function _releasableAmount(IERC20 token) private view returns (uint256) {
return _vestedAmount(token).sub(_released[address(token)]);
}
/**
* @dev Calculates the amount that has already vested.
* @param token ERC20 token which is being vested
*/
function _vestedAmount(IERC20 token) private view returns (uint256) {
uint256 currentBalance = token.balanceOf(address(this));
uint256 totalBalance = currentBalance.add(_released[address(token)]);
if (block.timestamp < _cliff) {
return 0;
} else if (block.timestamp >= _start.add(_duration) || _revoked[address(token)]) {
return totalBalance;
} else {
return totalBalance.mul(block.timestamp.sub(_start)).div(_duration);
}
}
}

View File

@ -1,21 +0,0 @@
pragma solidity ^0.4.4;
import '../PullPayment.sol';
// UNSAFE CODE, DO NOT USE!
contract BadArrayUse is PullPayment {
address[] employees;
function payBonus() {
for (var i = 0; i < employees.length; i++) {
address employee = employees[i];
uint bonus = calculateBonus(employee);
asyncSend(employee, bonus);
}
}
function calculateBonus(address employee) returns (uint) {
// some expensive computation...
}
}

View File

@ -1,16 +0,0 @@
pragma solidity ^0.4.4;
// UNSAFE CODE, DO NOT USE!
contract BadFailEarly {
uint constant DEFAULT_SALARY = 50000;
mapping(string => uint) nameToSalary;
function getSalary(string name) constant returns (uint) {
if (bytes(name).length != 0 && nameToSalary[name] != 0) {
return nameToSalary[name];
} else {
return DEFAULT_SALARY;
}
}
}

View File

@ -1,22 +0,0 @@
pragma solidity ^0.4.4;
// UNSAFE CODE, DO NOT USE!
contract BadPushPayments {
address highestBidder;
uint highestBid;
function bid() {
if (msg.value < highestBid) throw;
if (highestBidder != 0) {
// return bid to previous winner
if (!highestBidder.send(highestBid)) {
throw;
}
}
highestBidder = msg.sender;
highestBid = msg.value;
}
}

View File

@ -1,22 +0,0 @@
pragma solidity ^0.4.4;
import '../PullPayment.sol';
contract GoodArrayUse is PullPayment {
address[] employees;
mapping(address => uint) bonuses;
function payBonus() {
for (uint i = 0; i < employees.length; i++) {
address employee = employees[i];
uint bonus = bonuses[employee];
asyncSend(employee, bonus);
}
}
function calculateBonus(address employee) returns (uint) {
uint bonus = 0;
// some expensive computation...
bonuses[employee] = bonus;
}
}

View File

@ -1,14 +0,0 @@
pragma solidity ^0.4.4;
contract GoodFailEarly {
uint constant DEFAULT_SALARY = 50000;
mapping(string => uint) nameToSalary;
function getSalary(string name) constant returns (uint) {
if (bytes(name).length == 0) throw;
if (nameToSalary[name] == 0) throw;
return nameToSalary[name];
}
}

View File

@ -1,25 +0,0 @@
pragma solidity ^0.4.4;
contract GoodPullPayments {
address highestBidder;
uint highestBid;
mapping(address => uint) refunds;
function bid() external {
if (msg.value < highestBid) throw;
if (highestBidder != 0) {
refunds[highestBidder] += highestBid;
}
highestBidder = msg.sender;
highestBid = msg.value;
}
function withdrawBid() external {
uint refund = refunds[msg.sender];
refunds[msg.sender] = 0;
if (!msg.sender.send(refund)) {
refunds[msg.sender] = refund;
}
}
}

View File

@ -1,37 +0,0 @@
pragma solidity ^0.4.4;
/*
* Proof of Existence example contract
* see https://medium.com/zeppelin-blog/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05
*/
contract ProofOfExistence {
mapping (bytes32 => bool) public proofs;
// store a proof of existence in the contract state
function storeProof(bytes32 proof) {
proofs[proof] = true;
}
// calculate and store the proof for a document
function notarize(string document) {
var proof = calculateProof(document);
storeProof(proof);
}
// helper function to get a document's sha256
function calculateProof(string document) constant returns (bytes32) {
return sha256(document);
}
// check if a document has been notarized
function checkDocument(string document) constant returns (bool) {
var proof = calculateProof(document);
return hasProof(proof);
}
// returns true if proof is stored
function hasProof(bytes32 proof) constant returns (bool) {
return proofs[proof];
}
}

View File

@ -1,18 +0,0 @@
pragma solidity ^0.4.4;
import '../PullPayment.sol';
contract PullPaymentBid is PullPayment {
address public highestBidder;
uint public highestBid;
function bid() external {
if (msg.value <= highestBid) throw;
if (highestBidder != 0) {
asyncSend(highestBidder, highestBid);
}
highestBidder = msg.sender;
highestBid = msg.value;
}
}

View File

@ -0,0 +1,53 @@
pragma solidity ^0.5.0;
import "../crowdsale/validation/CappedCrowdsale.sol";
import "../crowdsale/distribution/RefundableCrowdsale.sol";
import "../crowdsale/emission/MintedCrowdsale.sol";
import "../token/ERC20/ERC20Mintable.sol";
import "../token/ERC20/ERC20Detailed.sol";
/**
* @title SampleCrowdsaleToken
* @dev Very simple ERC20 Token that can be minted.
* It is meant to be used in a crowdsale contract.
*/
contract SampleCrowdsaleToken is ERC20Mintable, ERC20Detailed {
constructor () public ERC20Detailed("Sample Crowdsale Token", "SCT", 18) {
// solhint-disable-previous-line no-empty-blocks
}
}
/**
* @title SampleCrowdsale
* @dev This is an example of a fully fledged crowdsale.
* The way to add new features to a base crowdsale is by multiple inheritance.
* In this example we are providing following extensions:
* CappedCrowdsale - sets a max boundary for raised funds
* RefundableCrowdsale - set a min goal to be reached and returns funds if it's not met
* MintedCrowdsale - assumes the token can be minted by the crowdsale, which does so
* when receiving purchases.
*
* After adding multiple features it's good practice to run integration tests
* to ensure that subcontracts works together as intended.
*/
contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale, MintedCrowdsale {
constructor (
uint256 openingTime,
uint256 closingTime,
uint256 rate,
address payable wallet,
uint256 cap,
ERC20Mintable token,
uint256 goal
)
public
Crowdsale(rate, wallet, token)
CappedCrowdsale(cap)
TimedCrowdsale(openingTime, closingTime)
RefundableCrowdsale(goal)
{
//As goal needs to be met for a successful crowdsale
//the value needs to less or equal than a cap which is limit for accepted funds
require(goal <= cap, "SampleCrowdSale: goal is greater than cap");
}
}

View File

@ -0,0 +1,21 @@
pragma solidity ^0.5.0;
import "../GSN/Context.sol";
import "../token/ERC20/ERC20.sol";
import "../token/ERC20/ERC20Detailed.sol";
/**
* @title SimpleToken
* @dev Very simple ERC20 Token example, where all tokens are pre-assigned to the creator.
* Note they can later distribute these tokens as they wish using `transfer` and other
* `ERC20` functions.
*/
contract SimpleToken is Context, ERC20, ERC20Detailed {
/**
* @dev Constructor that gives _msgSender() all of existing tokens.
*/
constructor () public ERC20Detailed("SimpleToken", "SIM", 18) {
_mint(_msgSender(), 10000 * (10 ** uint256(decimals())));
}
}

View File

@ -1,24 +0,0 @@
pragma solidity ^0.4.4;
import '../PullPayment.sol';
import '../Stoppable.sol';
contract StoppableBid is Stoppable, PullPayment {
address public highestBidder;
uint public highestBid;
function bid() external stopInEmergency {
if (msg.value <= highestBid) throw;
if (highestBidder != 0) {
asyncSend(highestBidder, highestBid);
}
highestBidder = msg.sender;
highestBid = msg.value;
}
function withdraw() onlyInEmergency {
selfdestruct(owner);
}
}

View File

@ -0,0 +1,52 @@
pragma solidity ^0.5.0;
import "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts may inherit from this and call {_registerInterface} to declare
* their support of an interface.
*/
contract ERC165 is IERC165 {
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* @dev Mapping of interface ids to whether or not it's supported.
*/
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () internal {
// Derived contracts need only register support for their own interfaces,
// we register support for ERC165 itself here
_registerInterface(_INTERFACE_ID_ERC165);
}
/**
* @dev See {IERC165-supportsInterface}.
*
* Time complexity O(1), guaranteed to always use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool) {
return _supportedInterfaces[interfaceId];
}
/**
* @dev Registers the contract as an implementer of the interface defined by
* `interfaceId`. Support of the actual ERC165 interface is automatic and
* registering its interface id is not required.
*
* See {IERC165-supportsInterface}.
*
* Requirements:
*
* - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
*/
function _registerInterface(bytes4 interfaceId) internal {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}

View File

@ -0,0 +1,104 @@
pragma solidity ^0.5.10;
/**
* @dev Library used to query support of an interface declared via {IERC165}.
*
* Note that these functions return the actual result of the query: they do not
* `revert` if an interface is not supported. It is up to the caller to decide
* what to do in these cases.
*/
library ERC165Checker {
// As per the EIP-165 spec, no interface should ever match 0xffffffff
bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* @dev Returns true if `account` supports the {IERC165} interface,
*/
function _supportsERC165(address account) internal view returns (bool) {
// Any contract that implements ERC165 must explicitly indicate support of
// InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid
return _supportsERC165Interface(account, _INTERFACE_ID_ERC165) &&
!_supportsERC165Interface(account, _INTERFACE_ID_INVALID);
}
/**
* @dev Returns true if `account` supports the interface defined by
* `interfaceId`. Support for {IERC165} itself is queried automatically.
*
* See {IERC165-supportsInterface}.
*/
function _supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
// query support of both ERC165 as per the spec and support of _interfaceId
return _supportsERC165(account) &&
_supportsERC165Interface(account, interfaceId);
}
/**
* @dev Returns true if `account` supports all the interfaces defined in
* `interfaceIds`. Support for {IERC165} itself is queried automatically.
*
* Batch-querying can lead to gas savings by skipping repeated checks for
* {IERC165} support.
*
* See {IERC165-supportsInterface}.
*/
function _supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
// query support of ERC165 itself
if (!_supportsERC165(account)) {
return false;
}
// query support of each interface in _interfaceIds
for (uint256 i = 0; i < interfaceIds.length; i++) {
if (!_supportsERC165Interface(account, interfaceIds[i])) {
return false;
}
}
// all interfaces supported
return true;
}
/**
* @notice Query if a contract implements an interface, does not check ERC165 support
* @param account The address of the contract to query for support of an interface
* @param interfaceId The interface identifier, as specified in ERC-165
* @return true if the contract at account indicates support of the interface with
* identifier interfaceId, false otherwise
* @dev Assumes that account contains a contract that supports ERC165, otherwise
* the behavior of this method is undefined. This precondition can be checked
* with the `supportsERC165` method in this library.
* Interface identification is specified in ERC-165.
*/
function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {
// success determines whether the staticcall succeeded and result determines
// whether the contract at account indicates support of _interfaceId
(bool success, bool result) = _callERC165SupportsInterface(account, interfaceId);
return (success && result);
}
/**
* @notice Calls the function with selector 0x01ffc9a7 (ERC165) and suppresses throw
* @param account The address of the contract to query for support of an interface
* @param interfaceId The interface identifier, as specified in ERC-165
* @return success true if the STATICCALL succeeded, false otherwise
* @return result true if the STATICCALL succeeded and the contract at account
* indicates support of the interface with identifier interfaceId, false otherwise
*/
function _callERC165SupportsInterface(address account, bytes4 interfaceId)
private
view
returns (bool, bool)
{
bytes memory encodedParams = abi.encodeWithSelector(_INTERFACE_ID_ERC165, interfaceId);
(bool success, bytes memory result) = account.staticcall.gas(30000)(encodedParams);
if (result.length < 32) return (false, false);
return (success, abi.decode(result, (bool)));
}
}

View File

@ -0,0 +1,35 @@
pragma solidity ^0.5.0;
import "./IERC1820Implementer.sol";
/**
* @dev Implementation of the {IERC1820Implementer} interface.
*
* Contracts may inherit from this and call {_registerInterfaceForAddress} to
* declare their willingness to be implementers.
* {IERC1820Registry-setInterfaceImplementer} should then be called for the
* registration to be complete.
*/
contract ERC1820Implementer is IERC1820Implementer {
bytes32 constant private ERC1820_ACCEPT_MAGIC = keccak256(abi.encodePacked("ERC1820_ACCEPT_MAGIC"));
mapping(bytes32 => mapping(address => bool)) private _supportedInterfaces;
/**
* See {IERC1820Implementer-canImplementInterfaceForAddress}.
*/
function canImplementInterfaceForAddress(bytes32 interfaceHash, address account) external view returns (bytes32) {
return _supportedInterfaces[interfaceHash][account] ? ERC1820_ACCEPT_MAGIC : bytes32(0x00);
}
/**
* @dev Declares the contract as willing to be an implementer of
* `interfaceHash` for `account`.
*
* See {IERC1820Registry-setInterfaceImplementer} and
* {IERC1820Registry-interfaceHash}.
*/
function _registerInterfaceForAddress(bytes32 interfaceHash, address account) internal {
_supportedInterfaces[interfaceHash][account] = true;
}
}

View File

@ -0,0 +1,22 @@
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

View File

@ -0,0 +1,17 @@
pragma solidity ^0.5.0;
/**
* @dev Interface for an ERC1820 implementer, as defined in the
* https://eips.ethereum.org/EIPS/eip-1820#interface-implementation-erc1820implementerinterface[EIP].
* Used by contracts that will be registered as implementers in the
* {IERC1820Registry}.
*/
interface IERC1820Implementer {
/**
* @dev Returns a special value (`ERC1820_ACCEPT_MAGIC`) if this contract
* implements `interfaceHash` for `account`.
*
* See {IERC1820Registry-setInterfaceImplementer}.
*/
function canImplementInterfaceForAddress(bytes32 interfaceHash, address account) external view returns (bytes32);
}

View File

@ -0,0 +1,109 @@
pragma solidity ^0.5.0;
/**
* @dev Interface of the global ERC1820 Registry, as defined in the
* https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
* implementers for interfaces in this registry, as well as query support.
*
* Implementers may be shared by multiple accounts, and can also implement more
* than a single interface for each account. Contracts can implement interfaces
* for themselves, but externally-owned accounts (EOA) must delegate this to a
* contract.
*
* {IERC165} interfaces can also be queried via the registry.
*
* For an in-depth explanation and source code analysis, see the EIP text.
*/
interface IERC1820Registry {
/**
* @dev Sets `newManager` as the manager for `account`. A manager of an
* account is able to set interface implementers for it.
*
* By default, each account is its own manager. Passing a value of `0x0` in
* `newManager` will reset the manager to this initial state.
*
* Emits a {ManagerChanged} event.
*
* Requirements:
*
* - the caller must be the current manager for `account`.
*/
function setManager(address account, address newManager) external;
/**
* @dev Returns the manager for `account`.
*
* See {setManager}.
*/
function getManager(address account) external view returns (address);
/**
* @dev Sets the `implementer` contract as `account`'s implementer for
* `interfaceHash`.
*
* `account` being the zero address is an alias for the caller's address.
* The zero address can also be used in `implementer` to remove an old one.
*
* See {interfaceHash} to learn how these are created.
*
* Emits an {InterfaceImplementerSet} event.
*
* Requirements:
*
* - the caller must be the current manager for `account`.
* - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
* end in 28 zeroes).
* - `implementer` must implement {IERC1820Implementer} and return true when
* queried for support, unless `implementer` is the caller. See
* {IERC1820Implementer-canImplementInterfaceForAddress}.
*/
function setInterfaceImplementer(address account, bytes32 interfaceHash, address implementer) external;
/**
* @dev Returns the implementer of `interfaceHash` for `account`. If no such
* implementer is registered, returns the zero address.
*
* If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
* zeroes), `account` will be queried for support of it.
*
* `account` being the zero address is an alias for the caller's address.
*/
function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address);
/**
* @dev Returns the interface hash for an `interfaceName`, as defined in the
* corresponding
* https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
*/
function interfaceHash(string calldata interfaceName) external pure returns (bytes32);
/**
* @notice Updates the cache with whether the contract implements an ERC165 interface or not.
* @param account Address of the contract for which to update the cache.
* @param interfaceId ERC165 interface for which to update the cache.
*/
function updateERC165Cache(address account, bytes4 interfaceId) external;
/**
* @notice Checks whether a contract implements an ERC165 interface or not.
* If the result is not cached a direct lookup on the contract address is performed.
* If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
* {updateERC165Cache} with the contract address.
* @param account Address of the contract to check.
* @param interfaceId ERC165 interface to check.
* @return True if `account` implements `interfaceId`, false otherwise.
*/
function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);
/**
* @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.
* @param account Address of the contract to check.
* @param interfaceId ERC165 interface to check.
* @return True if `account` implements `interfaceId`, false otherwise.
*/
function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);
event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);
event ManagerChanged(address indexed account, address indexed newManager);
}

View File

@ -0,0 +1,28 @@
= Introspection
This set of interfaces and contracts deal with [type introspection](https://en.wikipedia.org/wiki/Type_introspection) of contracts, that is, examining which functions can be called on them. This is usually referred to as a contract's _interface_.
Ethereum contracts have no native concept of an interface, so applications must usually simply trust they are not making an incorrect call. For trusted setups this is a non-issue, but often unknown and untrusted third-party addresses need to be interacted with. There may even not be any direct calls to them! (e.g. `ERC20` tokens may be sent to a contract that lacks a way to transfer them out of it, locking them forever). In these cases, a contract _declaring_ its interface can be very helpful in preventing errors.
There are two main ways to approach this.
* Locally, where a contract implements `IERC165` and declares an interface, and a second one queries it directly via `ERC165Checker`.
* Globally, where a global and unique registry (`IERC1820Registry`) is used to register implementers of a certain interface (`IERC1820Implementer`). It is then the registry that is queried, which allows for more complex setups, like contracts implementing interfaces for externally-owned accounts.
Note that, in all cases, accounts simply _declare_ their interfaces, but they are not required to actually implement them. This mechanism can therefore be used to both prevent errors and allow for complex interactions (see `ERC777`), but it must not be relied on for security.
== Local
{{IERC165}}
{{ERC165}}
{{ERC165Checker}}
== Global
{{IERC1820Registry}}
{{IERC1820Implementer}}
{{ERC1820Implementer}}

View File

@ -0,0 +1,74 @@
pragma solidity ^0.5.0;
import "../GSN/Context.sol";
import "../access/roles/PauserRole.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
contract Pausable is Context, PauserRole {
/**
* @dev Emitted when the pause is triggered by a pauser (`account`).
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by a pauser (`account`).
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state. Assigns the Pauser role
* to the deployer.
*/
constructor () internal {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*/
modifier whenNotPaused() {
require(!_paused, "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*/
modifier whenPaused() {
require(_paused, "Pausable: not paused");
_;
}
/**
* @dev Called by a pauser to pause, triggers stopped state.
*/
function pause() public onlyPauser whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Called by a pauser to unpause, returns to normal state.
*/
function unpause() public onlyPauser whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}

View File

@ -0,0 +1,5 @@
= Lifecycle
== Pausable
{{Pausable}}

29
contracts/math/Math.sol Normal file
View File

@ -0,0 +1,29 @@
pragma solidity ^0.5.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow, so we distribute
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
}

View File

@ -0,0 +1,9 @@
= Math
These are math-related utilities.
== Libraries
{{SafeMath}}
{{Math}}

Some files were not shown because too many files have changed in this diff Show More