Skip to content

Commit 2b620e5

Browse files
committed
Change kamikaze contract
1 parent 47f0c50 commit 2b620e5

3 files changed

Lines changed: 37 additions & 17 deletions

File tree

docs/assets/js/CONTACT_DATA.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const contractName = "Root";
2-
const contractAddress = '0xdb61d68359120f71cbfb99e0a9a0de6947acbd0c';//'0x0f61eaf9db577c0d458564d0c06376b725209269';//"0xc76e244bf79c72b02b2b98c7005785e2d4fca360";
2+
const contractAddress = '0x331f2812bd36f24c32ba44ee5d846dd9d5263512';//'0xdb61d68359120f71cbfb99e0a9a0de6947acbd0c';//'0x0f61eaf9db577c0d458564d0c06376b725209269';//"0xc76e244bf79c72b02b2b98c7005785e2d4fca360";
33
const abi = [
44
{
55
"constant": true,

docs/nav/tasks8.html

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,13 @@ <h1>BKX : CTF</h1>
314314
<span style="color: #a6e22e">string</span> <span style="color: #66d9ef">public</span> <span style="color: #a6e22e">bankName</span><span style="color: #f8f8f2">;</span>
315315
<span style="color: #a6e22e">address</span> <span style="color: #66d9ef">public</span> <span style="color: #a6e22e">bankOwner</span><span style="color: #f8f8f2">;</span>
316316

317-
<span style="color: #a6e22e">modifier</span> <span style="color: #a6e22e">onlyBankOwner</span><span style="color: #f8f8f2">()</span> <span style="color: #f8f8f2">{</span>
318-
<span style="color: #a6e22e">require</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span> <span style="color: #f92672">==</span> <span style="color: #a6e22e">bankOwner</span><span style="color: #f8f8f2">);</span>
317+
<span style="color: #a6e22e">modifier</span> <span style="color: #a6e22e">onlyBankOwnerOrBankAccount</span><span style="color: #f8f8f2">()</span> <span style="color: #f8f8f2">{</span>
318+
<span style="color: #a6e22e">require</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span> <span style="color: #f92672">==</span> <span style="color: #a6e22e">bankOwner</span> <span style="color: #f92672">||</span> <span style="color: #a6e22e">accounts</span><span style="color: #f8f8f2">[</span><span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span><span style="color: #f8f8f2">]</span> <span style="color: #f92672">!=</span> <span style="color: #a6e22e">address</span><span style="color: #f8f8f2">(</span><span style="color: #ae81ff">0</span><span style="color: #f8f8f2">));</span>
319319
<span style="color: #a6e22e">_</span><span style="color: #f8f8f2">;</span>
320320
<span style="color: #f8f8f2">}</span>
321321

322322
<span style="color: #66d9ef">function</span> <span style="color: #a6e22e">getCoins</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_to</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">uint256</span> <span style="color: #a6e22e">_value</span><span style="color: #f8f8f2">)</span> <span style="color: #66d9ef">public</span> <span style="color: #a6e22e">returns</span> <span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bool</span><span style="color: #f8f8f2">);</span>
323-
<span style="color: #66d9ef">function</span> <span style="color: #a6e22e">addNewBankAccount</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">BankAccount</span> <span style="color: #a6e22e">_address</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_accountOwner</span><span style="color: #f8f8f2">)</span> <span style="color: #a6e22e">external</span> <span style="color: #a6e22e">onlyBankOwner</span> <span style="color: #a6e22e">returns</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bool</span><span style="color: #f8f8f2">);</span>
323+
<span style="color: #66d9ef">function</span> <span style="color: #a6e22e">addNewBankAccount</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">BankAccount</span> <span style="color: #a6e22e">_address</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_accountOwner</span><span style="color: #f8f8f2">)</span> <span style="color: #a6e22e">external</span> <span style="color: #a6e22e">onlyBankOwnerOrBankAccount</span> <span style="color: #a6e22e">returns</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bool</span><span style="color: #f8f8f2">);</span>
324324
<span style="color: #f8f8f2">}</span>
325325

326326
<span style="color: #a6e22e">contract</span> <span style="color: #a6e22e">Bank</span> <span style="color: #a6e22e">is</span> <span style="color: #a6e22e">IBank</span> <span style="color: #f8f8f2">{</span>
@@ -337,7 +337,7 @@ <h1>BKX : CTF</h1>
337337
<span style="color: #66d9ef">return</span> <span style="color: #a6e22e">IERC20</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">ERC20Token</span><span style="color: #f8f8f2">).</span><span style="color: #a6e22e">transfer</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">_to</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">_value</span><span style="color: #f8f8f2">);</span>
338338
<span style="color: #f8f8f2">}</span>
339339

340-
<span style="color: #66d9ef">function</span> <span style="color: #a6e22e">addNewBankAccount</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">BankAccount</span> <span style="color: #a6e22e">_address</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_accountOwner</span><span style="color: #f8f8f2">)</span> <span style="color: #a6e22e">external</span> <span style="color: #a6e22e">onlyBankOwner</span> <span style="color: #a6e22e">returns</span> <span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bool</span><span style="color: #f8f8f2">)</span> <span style="color: #f8f8f2">{</span>
340+
<span style="color: #66d9ef">function</span> <span style="color: #a6e22e">addNewBankAccount</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">BankAccount</span> <span style="color: #a6e22e">_address</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_accountOwner</span><span style="color: #f8f8f2">)</span> <span style="color: #a6e22e">external</span> <span style="color: #a6e22e">onlyBankOwnerOrBankAccount</span> <span style="color: #a6e22e">returns</span> <span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bool</span><span style="color: #f8f8f2">)</span> <span style="color: #f8f8f2">{</span>
341341
<span style="color: #66d9ef">return</span> <span style="color: #a6e22e">addNewBankAccount_</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">_address</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">_accountOwner</span><span style="color: #f8f8f2">);</span>
342342
<span style="color: #f8f8f2">}</span>
343343

@@ -356,19 +356,19 @@ <h1>BKX : CTF</h1>
356356
<span style="color: #a6e22e">uint</span> <span style="color: #a6e22e">constant</span> <span style="color: #a6e22e">CLIENT_SHARE</span> <span style="color: #f92672">=</span> <span style="color: #a6e22e">DECIMAL_MULTIPLIER</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">sub</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">BANK_FEE</span><span style="color: #f8f8f2">);</span>
357357

358358
<span style="color: #a6e22e">address</span> <span style="color: #66d9ef">public</span> <span style="color: #a6e22e">bank</span><span style="color: #f8f8f2">;</span>
359-
<span style="color: #a6e22e">address</span> <span style="color: #66d9ef">public</span> <span style="color: #a6e22e">owner</span><span style="color: #f8f8f2">;</span>
359+
<span style="color: #a6e22e">mapping</span> <span style="color: #f8f8f2">(</span><span style="color: #a6e22e">address</span> <span style="color: #f92672">=&gt;</span> <span style="color: #a6e22e">bool</span><span style="color: #f8f8f2">)</span> <span style="color: #66d9ef">public</span> <span style="color: #a6e22e">owners</span><span style="color: #f8f8f2">;</span>
360360

361361
<span style="color: #a6e22e">uint256</span> <span style="color: #a6e22e">internal</span> <span style="color: #a6e22e">frozenBalance</span><span style="color: #f8f8f2">;</span>
362362
<span style="color: #a6e22e">uint256</span> <span style="color: #a6e22e">internal</span> <span style="color: #a6e22e">releasedETH</span><span style="color: #f8f8f2">;</span>
363363

364364
<span style="color: #a6e22e">modifier</span> <span style="color: #a6e22e">onlyBankOrAccountOwner</span><span style="color: #f8f8f2">()</span> <span style="color: #f8f8f2">{</span>
365365
<span style="color: #a6e22e">address</span> <span style="color: #a6e22e">bankOwner</span> <span style="color: #f92672">=</span> <span style="color: #a6e22e">IBank</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bank</span><span style="color: #f8f8f2">).</span><span style="color: #a6e22e">bankOwner</span><span style="color: #f8f8f2">();</span>
366-
<span style="color: #a6e22e">require</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span> <span style="color: #f92672">==</span> <span style="color: #a6e22e">bankOwner</span> <span style="color: #f92672">||</span> <span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span> <span style="color: #f92672">==</span> <span style="color: #a6e22e">owner</span><span style="color: #f8f8f2">);</span>
366+
<span style="color: #a6e22e">require</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bankOwner</span> <span style="color: #f92672">==</span> <span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span> <span style="color: #f92672">||</span> <span style="color: #a6e22e">owners</span><span style="color: #f8f8f2">[</span><span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span><span style="color: #f8f8f2">]</span> <span style="color: #f92672">==</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">);</span>
367367
<span style="color: #a6e22e">_</span><span style="color: #f8f8f2">;</span>
368368
<span style="color: #f8f8f2">}</span>
369369

370370
<span style="color: #a6e22e">modifier</span> <span style="color: #a6e22e">onlyOwner</span><span style="color: #f8f8f2">()</span> <span style="color: #f8f8f2">{</span>
371-
<span style="color: #a6e22e">require</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span> <span style="color: #f92672">==</span> <span style="color: #a6e22e">owner</span><span style="color: #f8f8f2">);</span>
371+
<span style="color: #a6e22e">require</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">owners</span><span style="color: #f8f8f2">[</span><span style="color: #a6e22e">tx</span><span style="color: #f8f8f2">.</span><span style="color: #a6e22e">origin</span><span style="color: #f8f8f2">]</span> <span style="color: #f92672">==</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">);</span>
372372
<span style="color: #a6e22e">_</span><span style="color: #f8f8f2">;</span>
373373
<span style="color: #f8f8f2">}</span>
374374

@@ -390,10 +390,19 @@ <h1>BKX : CTF</h1>
390390

391391
<span style="color: #a6e22e">constructor</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_bank</span><span style="color: #f8f8f2">,</span> <span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_owner</span><span style="color: #f8f8f2">)</span> <span style="color: #f8f8f2">{</span>
392392
<span style="color: #a6e22e">bank</span> <span style="color: #f92672">=</span> <span style="color: #a6e22e">_bank</span><span style="color: #f8f8f2">;</span>
393-
<span style="color: #a6e22e">owner</span> <span style="color: #f92672">=</span> <span style="color: #a6e22e">_owner</span><span style="color: #f8f8f2">;</span>
393+
<span style="color: #a6e22e">owners</span><span style="color: #f8f8f2">[</span><span style="color: #a6e22e">_owner</span><span style="color: #f8f8f2">]</span> <span style="color: #f92672">=</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">;</span>
394394
<span style="color: #a6e22e">frozenBalance</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #a6e22e">e3</span><span style="color: #f8f8f2">;</span>
395395
<span style="color: #f8f8f2">}</span>
396396

397+
<span style="color: #75715e">/**</span>
398+
<span style="color: #75715e"> * If you want to add new teammates to resolve this task - use this function</span>
399+
<span style="color: #75715e"> */</span>
400+
<span style="color: #66d9ef">function</span> <span style="color: #a6e22e">addBankAccountOwners</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">address</span> <span style="color: #a6e22e">_newOwner</span><span style="color: #f8f8f2">)</span> <span style="color: #a6e22e">onlyOwner</span> <span style="color: #a6e22e">returns</span> <span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bool</span><span style="color: #f8f8f2">)</span> <span style="color: #f8f8f2">{</span>
401+
<span style="color: #a6e22e">owners</span><span style="color: #f8f8f2">[</span><span style="color: #a6e22e">_newOwner</span><span style="color: #f8f8f2">]</span> <span style="color: #f92672">=</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">;</span>
402+
<span style="color: #a6e22e">IBank</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">bank</span><span style="color: #f8f8f2">).</span><span style="color: #a6e22e">addNewBankAccount</span><span style="color: #f8f8f2">(</span><span style="color: #a6e22e">BankAccount</span> <span style="color: #a6e22e">address</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">this</span><span style="color: #f8f8f2">),</span> <span style="color: #a6e22e">_newOwner</span><span style="color: #f8f8f2">);</span>
403+
<span style="color: #66d9ef">return</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">;</span>
404+
<span style="color: #f8f8f2">}</span>
405+
397406
<span style="color: #66d9ef">function</span> <span style="color: #f8f8f2">()</span> <span style="color: #a6e22e">payable</span> <span style="color: #a6e22e">onlyBankOwner</span> <span style="color: #f8f8f2">{</span>
398407

399408
<span style="color: #f8f8f2">}</span>
@@ -435,6 +444,8 @@ <h1>BKX : CTF</h1>
435444
<span style="color: #f8f8f2">}</span>
436445
</pre></div>
437446

447+
448+
438449
</div>
439450

440451
</p>

smart-contracts/contracts/tasks/Kamikaze.sol

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,13 @@ contract IBank {
243243
string public bankName;
244244
address public bankOwner;
245245

246-
modifier onlyBankOwner() {
247-
require(tx.origin == bankOwner);
246+
modifier onlyBankOwnerOrBankAccount() {
247+
require(tx.origin == bankOwner || accounts[tx.origin] != address(0));
248248
_;
249249
}
250250

251251
function getCoins(address _to, uint256 _value) public returns (bool);
252-
function addNewBankAccount(BankAccount _address, address _accountOwner) external onlyBankOwner returns(bool);
252+
function addNewBankAccount(BankAccount _address, address _accountOwner) external onlyBankOwnerOrBankAccount returns(bool);
253253
}
254254

255255
contract Bank is IBank {
@@ -266,7 +266,7 @@ contract Bank is IBank {
266266
return IERC20(ERC20Token).transfer(_to, _value);
267267
}
268268

269-
function addNewBankAccount(BankAccount _address, address _accountOwner) external onlyBankOwner returns (bool) {
269+
function addNewBankAccount(BankAccount _address, address _accountOwner) external onlyBankOwnerOrBankAccount returns (bool) {
270270
return addNewBankAccount_(_address, _accountOwner);
271271
}
272272

@@ -285,19 +285,19 @@ contract IBankAccount {
285285
uint constant CLIENT_SHARE = DECIMAL_MULTIPLIER.sub(BANK_FEE);
286286

287287
address public bank;
288-
address public owner;
288+
mapping (address => bool) public owners;
289289

290290
uint256 internal frozenBalance;
291291
uint256 internal releasedETH;
292292

293293
modifier onlyBankOrAccountOwner() {
294294
address bankOwner = IBank(bank).bankOwner();
295-
require(tx.origin == bankOwner || tx.origin == owner);
295+
require(bankOwner == tx.origin || owners[tx.origin] == true);
296296
_;
297297
}
298298

299299
modifier onlyOwner() {
300-
require(tx.origin == owner);
300+
require(owners[tx.origin] == true);
301301
_;
302302
}
303303

@@ -319,10 +319,19 @@ contract BankAccount is IBankAccount {
319319

320320
constructor(address _bank, address _owner) {
321321
bank = _bank;
322-
owner = _owner;
322+
owners[_owner] = true;
323323
frozenBalance = 1e3;
324324
}
325325

326+
/**
327+
* If you want to add new teammates to resolve this task - use this function
328+
*/
329+
function addBankAccountOwners(address _newOwner) onlyOwner returns (bool) {
330+
owners[_newOwner] = true;
331+
IBank(bank).addNewBankAccount(this, _newOwner);
332+
return true;
333+
}
334+
326335
function () payable onlyBankOwner {
327336

328337
}

0 commit comments

Comments
 (0)