Skip to content

Instantly share code, notes, and snippets.

@joeykrug
Created June 23, 2016 18:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joeykrug/98382ece042986d6b0262ae7e1affb97 to your computer and use it in GitHub Desktop.
Save joeykrug/98382ece042986d6b0262ae7e1affb97 to your computer and use it in GitHub Desktop.
Rep contract
# Storage of all data associated with reporters
# takes reporterID as key, value is rep amount
data reporting[]
# keeps track of total rep in the system
data totalRep
# sender/owner, then spender, e.g. approvedToSpend[owner][spender]
# 1 if spender is approved, 0 if not
data approvedToSpend[][]
# whether the contract has been finished seeding
data seeded
event Transfer(_from:indexed, _to:indexed, _value)
event Approval(_owner:indexed, _spender:indexed)
macro ONE:
2**64
macro refund():
if(msg.value > 0):
send(msg.sender, msg.value)
def any():
refund()
# Transfer rep
# @return value of reputation sent, 0 if not enough reputation
def transfer(receiver, value):
senderBalance = self.reporting[msg.sender]
if(senderBalance < value or value <= 0 or !self.seeded):
throw
self.reporting[msg.sender] -= value
self.reporting[receiver] += value
log(type=Transfer, msg.sender, receiver, value)
return(value)
# TransferFrom per token api for dormant rep
# fails unless from has authorized sender
def transferFrom(from, receiver, value):
senderBalance = self.reporting[from]
if(senderBalance < value or value <= 0 or !self.approvedToSpend[from][msg.sender] or !self.seeded):
throw
self.reporting[from] -= value
self.reporting[receiver] += value
log(type=Transfer, from, receiver, value)
return(value)
# Allows spender to withdraw from your dormant rep account
def approve(spender):
self.approvedToSpend[msg.sender][spender] = 1
log(type=Approval, msg.sender, spender)
return(1)
# Sets the initial distribution of rep
def setSaleDistribution(addresses: arr, balances: arr):
i = 0
while i < len(addresses):
if(!self.reporting[addresses[i]] && !self.seeded):
self.reporting[addresses[i]] = balances[i]
self.totalRep += balances[i]
i+=1
if(totalRep == 11000000*ONE):
self.seeded = 1
return(1)
# Returns whether spender can withdraw from owner
def approved(owner, spender):
return(self.approvedToSpend[owner][spender])
# @return reputation value
def balanceOf(address):
return(self.reporting[address])
def getTotalRep(branch):
return(self.totalRep)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment