code: func sigHash(contract, beneficiary common.Address, sum *big.Int) []byte {
  	bigamount := sum.Bytes()
  	if len(bigamount) > 32 {
  		return nil
  	}
  	var amount32 [32]byte
  	copy(amount32[32-len(bigamount):32], bigamount)
  	input := append(contract.Bytes(), beneficiary.Bytes()...)
  	input = append(input, amount32[:]...)
  	return crypto.Keccak256(input)
  }
docs: // data to sign: contract address, beneficiary, cumulative amount of funds ever sent