Solidity

最少的投資不起作用

  • May 24, 2018
uint256 public max_contribution = 50 ether; 
   uint256 public min_contribution = 0.1 ether; 
function transfer(address to, uint tokens) public payable returns (bool success) {
   require(msg.value >= min_contribution);
   require(msg.value <= max_contribution);
   balances[msg.sender] = safeSub(balances[msg.sender], tokens);
   balances[to] = safeAdd(balances[to], tokens);
   emit Transfer(msg.sender, to, tokens);
   return true;
}

使用它來設置最小的 ETH 投資,發送 0.1> 數量的 ETH 時仍會收到代幣。在測試網上進行測試。有任何想法嗎?合約:0xb1a89c746ecec28bfdf7f06f44b603bf9c035be8 和驗證碼。

transfer正如@mafrasi2 指出的那樣,由於您發布了備份函式的程式碼而不是程式碼,所以造成了混亂。

現在,回退函式確定代幣的數量並更新余額。在這裡你可以限制乙太的數量,如下所示:

function () public payable {
       require(now >= startDate && now <= endDate);
       require(msg.value >= min_contribution);
       require(msg.value <= max_contribution);
       uint tokens;
       if (now <= bonusEnds) {
           tokens = msg.value * 12000;
       } else {
           tokens = msg.value * 10000;
       }
       balances[msg.sender] = safeAdd(balances[msg.sender], tokens);
       _totalSupply = safeAdd(_totalSupply, tokens);
       emit Transfer(address(0), msg.sender, tokens);
       owner.transfer(msg.value);
   }

但這還不是全部,您必須取消傳輸功能中的限制,因為在目前狀態下,您的代幣使用者將永遠無法傳輸它,除非他們發送乙太幣,這很奇怪。所以轉移應該是這樣的:

function transfer(address to, uint tokens) public returns (bool success) {
   balances[msg.sender] = safeSub(balances[msg.sender], tokens);
   balances[to] = safeAdd(balances[to], tokens);
   emit Transfer(msg.sender, to, tokens);
   return true;
}

希望這可以幫助。

引用自:https://ethereum.stackexchange.com/questions/49239