Sunday 4 November 2018

Note For Ethernaut#2 - Fallout

Solidity

pragma solidity ^0.4.18;

import 'zeppelin-solidity/contracts/ownership/Ownable.sol';

contract Fallout is Ownable {

  mapping (address => uint) allocations;

  /* constructor */
  function Fal1out() public payable {
    owner = msg.sender;
    allocations[owner] = msg.value;
  }

  function allocate() public payable {
    allocations[msg.sender] += msg.value;
  }

  function sendAllocation(address allocator) public {
    require(allocations[allocator] > 0);
    allocator.transfer(allocations[allocator]);
  }

  function collectAllocations() public onlyOwner {
    msg.sender.transfer(this.balance);
  }

  function allocatorBalance(address allocator) public view returns (uint) {
    return allocations[allocator];
  }
}

What I learned From It

  • careless could cause some harm mistake
tags: ethernaut solidity

Note For Ethernaut#1 - Fallback

Solidity

pragma solidity ^0.4.18;

import 'zeppelin-solidity/contracts/ownership/Ownable.sol';

contract Fallback is Ownable {

  mapping(address => uint) public contributions;

  function Fallback() public {
    contributions[msg.sender] = 1000 * (1 ether);
  }

  function contribute() public payable {
    require(msg.value < 0.001 ether);
    contributions[msg.sender] += msg.value;
    if(contributions[msg.sender] > contributions[owner]) {
      owner = msg.sender;
    }
  }

  function getContribution() public view returns (uint) {
    return contributions[msg.sender];
  }

  function withdraw() public onlyOwner {
    owner.transfer(this.balance);
  }

  function() payable public {
    require(msg.value > 0 && contributions[msg.sender] > 0);
    owner = msg.sender;
  }
}

What I learned From It

Fallback Function

每個合約裡最多能有一個未命名的公開 funtion,沒有參數、回傳值。
在幾種情況下會執行:
  1. 呼叫合約的函式不在 abi 裡。
  2. 對合約轉帳 (不帶 data 參數)。
只有 payable 的 Function 才能接收 Ether.

Reference:

tags: ethernaut solidity

Note For Ethernaut#0 - Hello

Solidity

pragma solidity ^0.4.18;

contract Instance {

  string public password;
  uint8 public infoNum = 42;
  string public theMethodName = 'The method name is method7123949.';
  bool private cleared = false;

  // constructor
  function Instance(string _password) public {
    password = _password;
  }

  function info() public pure returns (string) {
    return 'You will find what you need in info1().';
  }

  function info1() public pure returns (string) {
    return 'Try info2(), but with "hello" as a parameter.';
  }

  function info2(string param) public pure returns (string) {
    if(keccak256(param) == keccak256('hello')) {
      return 'The property infoNum holds the number of the next info method to call.';
    }
    return 'Wrong parameter.';
  }

  function info42() public pure returns (string) {
    return 'theMethodName is the name of the next method.';
  }

  function method7123949() public pure returns (string) {
    return 'If you know the password, submit it to authenticate().';
  }

  function authenticate(string passkey) public {
    if(keccak256(passkey) == keccak256(password)) {
      cleared = true;
    }
  }

  function getCleared() public view returns (bool) {
    return cleared;
  }
}
在判斷參數時用到 keccak256,文件提到 keccak256 是 “tight pakced”,而 “tightly packed” 是指不會對參數進行 padding 處理。

What I learned From It

  • 參數會先經過 keccak256 pack
  • 取 public 變數與參數方式一樣
tags: ethernaut solidity

Friday 5 October 2018

Music HW#1 - 3度音程

比起一個8度內的3度音程,更喜歡高8度的3度的聲響,2個是完全不同的感覺。

3度音在指板上的相對位置

1. 一個8度的3


  • Root on 6th String

  • Root on 5th String

  • Root on 4th String

  • Root on 3th String

  • Root on 2th String


2. 高8的3


  • Root on 6th String

  • Root on 5th String

  • Root on 4th String


例子

1. 一個8度的3


  • 金雅中 - 瑪麗亞

分析:
 Key: B
 3度在前奏/主歌部份:運用 I VII VI VII 的3度和聲

2. 高8的3


  • RHCP - Scar Tissue



這首是讓我發現原來這麼好聽的聲音,其實只是3度 的歌。

分析:
 Key: F
 3度在前奏/主歌部份:運用 I V VI 的 R & 3 單音製造出遼闊的感覺。

  • James Bay - Let It Go



分析:
 Key: A#m
 

  • The Beatles - Blackbird



分析:
 這首是例子裡面最令人驚奇的,非常大量運用3度,除了前幾首的手法外,與根音的距離也是3。