Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
openzeppelin-contracts-upgradeable
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
openzeppelin-contracts-upgradeable
Commits
4fad1505
Commit
4fad1505
authored
Apr 06, 2017
by
Manuel Araoz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make SafeMath a library
parent
58814299
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
31 additions
and
27 deletions
+31
-27
SafeMath.sol
contracts/SafeMath.sol
+1
-1
PullPayment.sol
contracts/payment/PullPayment.sol
+6
-4
BasicToken.sol
contracts/token/BasicToken.sol
+4
-3
CrowdsaleToken.sol
contracts/token/CrowdsaleToken.sol
+3
-3
StandardToken.sol
contracts/token/StandardToken.sol
+3
-3
VestedToken.sol
contracts/token/VestedToken.sol
+10
-9
SafeMathMock.sol
test/helpers/SafeMathMock.sol
+4
-4
No files found.
contracts/SafeMath.sol
View file @
4fad1505
...
@@ -4,7 +4,7 @@ pragma solidity ^0.4.8;
...
@@ -4,7 +4,7 @@ pragma solidity ^0.4.8;
/**
/**
* Math operations with safety checks
* Math operations with safety checks
*/
*/
contract
SafeMath {
library
SafeMath {
function safeMul(uint a, uint b) internal returns (uint) {
function safeMul(uint a, uint b) internal returns (uint) {
uint c = a * b;
uint c = a * b;
assert(a == 0 || c / a == b);
assert(a == 0 || c / a == b);
...
...
contracts/payment/PullPayment.sol
View file @
4fad1505
...
@@ -9,14 +9,16 @@ import '../SafeMath.sol';
...
@@ -9,14 +9,16 @@ import '../SafeMath.sol';
* Base contract supporting async send for pull payments.
* Base contract supporting async send for pull payments.
* Inherit from this contract and use asyncSend instead of send.
* Inherit from this contract and use asyncSend instead of send.
*/
*/
contract PullPayment is SafeMath {
contract PullPayment {
using SafeMath for uint;
mapping(address => uint) public payments;
mapping(address => uint) public payments;
uint public totalPayments;
uint public totalPayments;
// store sent amount as credit to be pulled, called by payer
// store sent amount as credit to be pulled, called by payer
function asyncSend(address dest, uint amount) internal {
function asyncSend(address dest, uint amount) internal {
payments[dest] =
safeAdd(payments[dest],
amount);
payments[dest] =
payments[dest].safeAdd(
amount);
totalPayments =
safeAdd(totalPayments,
amount);
totalPayments =
totalPayments.safeAdd(
amount);
}
}
// withdraw accumulated balance, called by payee
// withdraw accumulated balance, called by payee
...
@@ -32,7 +34,7 @@ contract PullPayment is SafeMath {
...
@@ -32,7 +34,7 @@ contract PullPayment is SafeMath {
throw;
throw;
}
}
totalPayments =
safeSub(totalPayments,
payment);
totalPayments =
totalPayments.safeSub(
payment);
payments[payee] = 0;
payments[payee] = 0;
if (!payee.send(payment)) {
if (!payee.send(payment)) {
...
...
contracts/token/BasicToken.sol
View file @
4fad1505
...
@@ -9,7 +9,8 @@ import '../SafeMath.sol';
...
@@ -9,7 +9,8 @@ import '../SafeMath.sol';
* Basic token
* Basic token
* Basic version of StandardToken, with no allowances
* Basic version of StandardToken, with no allowances
*/
*/
contract BasicToken is ERC20Basic, SafeMath {
contract BasicToken is ERC20Basic {
using SafeMath for uint;
mapping(address => uint) balances;
mapping(address => uint) balances;
...
@@ -22,8 +23,8 @@ contract BasicToken is ERC20Basic, SafeMath {
...
@@ -22,8 +23,8 @@ contract BasicToken is ERC20Basic, SafeMath {
}
}
function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {
function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {
balances[msg.sender] =
safeSub(balances[msg.sender],
_value);
balances[msg.sender] =
balances[msg.sender].safeSub(
_value);
balances[_to] =
safeAdd(balances[_to],
_value);
balances[_to] =
balances[_to].safeAdd(
_value);
Transfer(msg.sender, _to, _value);
Transfer(msg.sender, _to, _value);
}
}
...
...
contracts/token/CrowdsaleToken.sol
View file @
4fad1505
...
@@ -32,10 +32,10 @@ contract CrowdsaleToken is StandardToken {
...
@@ -32,10 +32,10 @@ contract CrowdsaleToken is StandardToken {
throw;
throw;
}
}
uint tokens =
safeMul(msg.value,
getPrice());
uint tokens =
msg.value.safeMul(
getPrice());
totalSupply =
safeAdd(totalSupply,
tokens);
totalSupply =
totalSupply.safeAdd(
tokens);
balances[recipient] =
safeAdd(balances[recipient],
tokens);
balances[recipient] =
balances[recipient].safeAdd(
tokens);
if (!multisig.send(msg.value)) {
if (!multisig.send(msg.value)) {
throw;
throw;
...
...
contracts/token/StandardToken.sol
View file @
4fad1505
...
@@ -22,9 +22,9 @@ contract StandardToken is BasicToken, ERC20 {
...
@@ -22,9 +22,9 @@ contract StandardToken is BasicToken, ERC20 {
// Check is not needed because safeSub(_allowance, _value) will already throw if this condition is not met
// Check is not needed because safeSub(_allowance, _value) will already throw if this condition is not met
// if (_value > _allowance) throw;
// if (_value > _allowance) throw;
balances[_to] =
safeAdd(balances[_to],
_value);
balances[_to] =
balances[_to].safeAdd(
_value);
balances[_from] =
safeSub(balances[_from],
_value);
balances[_from] =
balances[_from].safeSub(
_value);
allowed[_from][msg.sender] =
safeSub(_allowance,
_value);
allowed[_from][msg.sender] =
_allowance.safeSub(
_value);
Transfer(_from, _to, _value);
Transfer(_from, _to, _value);
}
}
...
...
contracts/token/VestedToken.sol
View file @
4fad1505
...
@@ -52,8 +52,8 @@ contract VestedToken is StandardToken, LimitedTransferToken {
...
@@ -52,8 +52,8 @@ contract VestedToken is StandardToken, LimitedTransferToken {
grants[_holder][_grantId] = grants[_holder][grants[_holder].length - 1];
grants[_holder][_grantId] = grants[_holder][grants[_holder].length - 1];
grants[_holder].length -= 1;
grants[_holder].length -= 1;
balances[msg.sender] =
safeAdd(balances[msg.sender],
nonVested);
balances[msg.sender] =
balances[msg.sender].safeAdd(
nonVested);
balances[_holder] =
safeSub(balances[_holder],
nonVested);
balances[_holder] =
balances[_holder].safeSub(
nonVested);
Transfer(_holder, msg.sender, nonVested);
Transfer(_holder, msg.sender, nonVested);
}
}
...
@@ -98,32 +98,33 @@ contract VestedToken is StandardToken, LimitedTransferToken {
...
@@ -98,32 +98,33 @@ contract VestedToken is StandardToken, LimitedTransferToken {
return tokens;
return tokens;
}
}
uint256 cliffTokens =
safeDiv(safeMul(tokens, safeSub(cliff, start)), safeSub(vesting,
start));
uint256 cliffTokens =
tokens.safeMul(cliff.safeSub(start)).safeDiv(vesting.safeSub(
start));
vestedTokens = cliffTokens;
vestedTokens = cliffTokens;
uint256 vestingTokens =
safeSub(tokens,
cliffTokens);
uint256 vestingTokens =
tokens.safeSub(
cliffTokens);
vestedTokens =
safeAdd(vestedTokens, safeDiv(safeMul(vestingTokens, safeSub(time, cliff)), safeSub(vesting,
cliff)));
vestedTokens =
vestedTokens.safeAdd(vestingTokens.safeMul(time.safeSub(cliff)).safeDiv(vesting.safeSub(
cliff)));
}
}
function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
return
safeSub(grant.value,
vestedTokens(grant, time));
return
grant.value.safeSub(
vestedTokens(grant, time));
}
}
function lastTokenIsTransferableDate(address holder) constant public returns (uint64 date) {
function lastTokenIsTransferableDate(address holder) constant public returns (uint64 date) {
date = uint64(now);
date = uint64(now);
uint256 grantIndex = grants[holder].length;
uint256 grantIndex = grants[holder].length;
for (uint256 i = 0; i < grantIndex; i++) {
for (uint256 i = 0; i < grantIndex; i++) {
date = max64(grants[holder][i].vesting, date);
date =
SafeMath.
max64(grants[holder][i].vesting, date);
}
}
}
}
function transferableTokens(address holder, uint64 time) constant public returns (uint256 nonVested) {
function transferableTokens(address holder, uint64 time) constant public returns (uint256 nonVested) {
uint256 grantIndex = grants[holder].length;
uint256 grantIndex = grants[holder].length;
for (uint256 i = 0; i < grantIndex; i++) {
for (uint256 i = 0; i < grantIndex; i++) {
nonVested = safeAdd(nonVested, nonVestedTokens(grants[holder][i], time));
uint256 current = nonVestedTokens(grants[holder][i], time);
nonVested = nonVested.safeAdd(current);
}
}
return
min256(safeSub(balances[holder],
nonVested), super.transferableTokens(holder, time));
return
SafeMath.min256(balances[holder].safeSub(
nonVested), super.transferableTokens(holder, time));
}
}
}
}
test/helpers/SafeMathMock.sol
View file @
4fad1505
...
@@ -4,18 +4,18 @@ pragma solidity ^0.4.8;
...
@@ -4,18 +4,18 @@ pragma solidity ^0.4.8;
import '../../contracts/SafeMath.sol';
import '../../contracts/SafeMath.sol';
contract SafeMathMock
is SafeMath
{
contract SafeMathMock {
uint public result;
uint public result;
function multiply(uint a, uint b) {
function multiply(uint a, uint b) {
result = safeMul(a, b);
result =
SafeMath.
safeMul(a, b);
}
}
function subtract(uint a, uint b) {
function subtract(uint a, uint b) {
result = safeSub(a, b);
result =
SafeMath.
safeSub(a, b);
}
}
function add(uint a, uint b) {
function add(uint a, uint b) {
result = safeAdd(a, b);
result =
SafeMath.
safeAdd(a, b);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment