summaryrefslogtreecommitdiffstats
path: root/tests/syntax-tests/source/Vyper/crowdsale.vy
diff options
context:
space:
mode:
Diffstat (limited to 'tests/syntax-tests/source/Vyper/crowdsale.vy')
-rw-r--r--tests/syntax-tests/source/Vyper/crowdsale.vy89
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/syntax-tests/source/Vyper/crowdsale.vy b/tests/syntax-tests/source/Vyper/crowdsale.vy
new file mode 100644
index 00000000..8a74cf93
--- /dev/null
+++ b/tests/syntax-tests/source/Vyper/crowdsale.vy
@@ -0,0 +1,89 @@
+# IndividuallyCappedCrowdsale
+# Contributors: Binod Nirvan
+# This file is released under Apache 2.0 license.
+# @dev Crowdsale with a limit for total contributions.
+# Ported from Open Zeppelin
+# https://github.com/OpenZeppelin
+#
+# See https://github.com/OpenZeppelin
+# Open Zeppelin tests ported: Crowdsale.test.js
+
+
+#@dev ERC20/223 Features referenced by this contract
+contract TokenContract:
+ def transfer(_to: address, _value: uint256) -> bool: modifying
+
+# 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
+TokenPurchase: event({_purchaser: indexed(address), _beneficiary: indexed(address), _value: uint256(wei), _amount: uint256})
+
+# The token being sold
+token: public(address)
+
+#Address where funds are collected
+wallet: public(address)
+
+# 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 DetailedERC20 token with 3 decimals called TOK
+# 1 wei will give you 1 unit, or 0.001 TOK.
+rate: public(uint256)
+
+#Amount of wei raised
+weiRaised: public(uint256(wei))
+
+@public
+def __init__(_rate: uint256, _wallet: address, _token: address):
+ """
+ @dev Initializes this contract
+ @param _rate Number of token units a buyer gets per wei
+ @param _wallet Address where collected funds will be forwarded to
+ @param _token Address of the token being sold
+ """
+
+ assert _rate > 0, "Invalid value supplied for the parameter \"_rate\"."
+ assert _wallet != ZERO_ADDRESS, "Invalid wallet address."
+ assert _token != ZERO_ADDRESS, "Invalid token address."
+
+ self.rate = _rate
+ self.wallet = _wallet
+ self.token = _token
+
+@private
+@constant
+def getTokenAmount(_weiAmount: uint256) -> uint256:
+ return _weiAmount * self.rate
+
+
+@private
+def processTransaction(_sender: address, _beneficiary: address, _weiAmount: uint256(wei)):
+ #pre validate
+ assert _beneficiary != ZERO_ADDRESS, "Invalid address."
+ assert _weiAmount != 0, "Invalid amount received."
+
+ #calculate the number of tokens for the Ether contribution.
+ tokens: uint256 = self.getTokenAmount(as_unitless_number(_weiAmount))
+
+ self.weiRaised += _weiAmount
+
+ #process purchase
+ assert TokenContract(self.token).transfer(_beneficiary, tokens), "Could not forward funds due to an unknown error."
+ log.TokenPurchase(_sender, _beneficiary, _weiAmount, tokens)
+
+ #forward funds to the receiving wallet address.
+ send(self.wallet, _weiAmount)
+
+ #post validate
+
+@public
+@payable
+def buyTokens(_beneficiary: address):
+ self.processTransaction(msg.sender, _beneficiary, msg.value)
+
+@public
+@payable
+def __default__():
+ self.processTransaction(msg.sender, msg.sender, msg.value)