SC Arguments: [Name:SC_ACTION Type:uint64 Value:'0' Name:SC_ID Type:hash Value:'ac80ba3dbb74c08b60b78aee3519eee943fb4db184a96203318076f7faaf76b7' Name:code Type:string Value:'// https://derofund.space
//This is v4 contract for Patreon/GoFundMe for Dero.
//Contract written by apollo
//should add removesupporter function which can be invoked by either user in question, project owner, or ceo. this is mostly to clear expired subscriptions and restore tier availability
Function Initialize() Uint64
99 RETURN 0
End Function
Function AddOrModifyTier(Amount Uint64, Interval Uint64, Limit Uint64, Address String, Hash String, Index Uint64) Uint64
10 IF EXISTS(Hash+"_Owner") == 0 THEN GOTO 30
15 IF ASSETVALUE(SCID()) != 100000 THEN GOTO 100
20 IF LOAD(Hash+"_Owner") != SIGNER() THEN GOTO 100 ELSE GOTO 40
30 IF ASSETVALUE(SCID()) != 1000000 THEN GOTO 100
31 STORE(Hash+"_Owner", SIGNER())
40 STORE(Hash+Index+"_Amount", Amount)
50 STORE(Hash+Index+"_Interval", Interval)
60 STORE(Hash+Index+"_Amount", Amount)
70 STORE(Hash+Index+"_Address", ADDRESS_RAW(Address))
80 STORE(Hash+Index+"_Available", Limit)
86 IslandVersionUpdate(Hash)
99 RETURN 0
100 RETURN 1
End Function
Function NewFundRaiser(Goal Uint64, Deadline Uint64, Address String, Hash String, Index Uint64) Uint64
10 IF EXISTS(Hash+"_Owner") == 0 THEN GOTO 30
11 IF ASSETVALUE(SCID()) != 100000 THEN GOTO 100
15 IF EXISTS(Hash+Index+"_Goal") == 1 THEN GOTO 100
20 IF LOAD(Hash+"_Owner") != SIGNER() THEN GOTO 100 ELSE GOTO 40
30 IF ASSETVALUE(SCID()) != 1000000 THEN GOTO 100
31 STORE(Hash+"_Owner", SIGNER())
40 STORE(Hash+Index+"_Goal", Goal)
50 STORE(Hash+Index+"_Deadline", Deadline)
60 STORE(Hash+Index+"_Fundee", ADDRESS_RAW(Address))
70 STORE(Hash+Index+"_Raised",0)
80 STORE(Hash+Index+"_Claimed",0)
86 IslandVersionUpdate(Hash)
99 RETURN 0
100 RETURN 1
End Function
Function SupportGoal(HashAndIndex String, Refundable Uint64) Uint64
10 IF EXISTS(HashAndIndex+"_Deadline") == 0 THEN GOTO 100
20 IF LOAD(HashAndIndex+"_Deadline") < BLOCK_TIMESTAMP() THEN GOTO 100
25 SEND_ASSET_TO_ADDRESS(SIGNER(),DEROVALUE(),SCID())
30 STORE(HashAndIndex+"_Raised", LOAD(HashAndIndex+"_Raised") + DEROVALUE())
40 IF EXISTS(HashAndIndex+"_"+SIGNER()) == 1 THEN GOTO 70
45 IF Refundable == 0 THEN GOTO 55
50 STORE(HashAndIndex+"_"+SIGNER(),DEROVALUE())
52 RETURN 0
55 SEND_DERO_TO_ADDRESS(LOAD(HashAndIndex+"_Fundee"),DEROVALUE())
57 STORE(HashAndIndex+"_Claimed",LOAD(HashAndIndex+"_Claimed")+DEROVALUE())
60 RETURN 0
70 IF Refundable == 0 THEN GOTO 77
75 STORE(HashAndIndex+"_"+SIGNER(),LOAD(HashAndIndex+"_"+SIGNER())+DEROVALUE())
76 RETURN 0
77 SEND_DERO_TO_ADDRESS(LOAD(HashAndIndex+"_Address"),DEROVALUE())
78 STORE(HashAndIndex+"_Claimed",LOAD(HashAndIndex+"_Claimed")+DEROVALUE())
80 RETURN 0
100 RETURN 1
End Function
Function WithdrawFromFundraiser(Hash String, Index Uint64) Uint64
10 IF EXISTS(Hash+Index+"_Deadline") == 0 THEN GOTO 100
20 IF LOAD(Hash+Index+"_Deadline") > BLOCK_TIMESTAMP() THEN GOTO 65
30 IF LOAD(Hash+Index+"_Raised") < LOAD(Hash+Index+"_Goal") THEN GOTO 40 ELSE GOTO 70
40 IF EXISTS(Hash+Index+"_"+SIGNER()) == 0 THEN GOTO 100
50 SEND_DERO_TO_ADDRESS(SIGNER(),LOAD(Hash+Index+"_"+SIGNER()))
55 SEND_ASSET_TO_ADDRESS(SIGNER(),LOAD(Hash+Index+"_"+SIGNER()),SCID())
60 RETURN 0
65 IF LOAD(Hash+Index+"_Raised") < LOAD(Hash+Index+"_Goal") THEN GOTO 100 ELSE GOTO 70
70 IF LOAD(Hash+"_Owner") != SIGNER() THEN GOTO 100
80 SEND_DERO_TO_ADDRESS(LOAD(Hash+Index+"_Fundee"), LOAD(Hash+Index+"_Raised")-LOAD(Hash+Index+"_Claimed"))
85 SEND_ASSET_TO_ADDRESS(LOAD(Hash+Index+"_Fundee"), LOAD(Hash+Index+"_Raised")-LOAD(Hash+Index+"_Claimed"),SCID())
90 STORE(Hash+Index+"_Claimed",LOAD(Hash+Index+"_Claimed")+LOAD(Hash+Index+"_Raised"))
99 RETURN 0
100 RETURN 1
End Function
Function TopUp(SupporterHash String, TierHash String) Uint64
10 IF EXISTS(SupporterHash+"_"+TierHash+"_Expiry") == 0 THEN GOTO 100
20 STORE(SupporterHash+"_"+TierHash+"_Expiry",LOAD(SupporterHash+"_"TierHash+"_Expiry")+LOAD(TierHash+"_Interval")*DEROVALUE()/LOAD(TierHash+"_Amount"))
30 SEND_DERO_TO_ADDRESS(LOAD(TierHash+"_Address"),DEROVALUE())
40 SEND_ASSET_TO_ADDRESS(SIGNER(),DEROVALUE(),SCID())
99 RETURN 0
100 RETURN 1
End Function
Function AddSupporter(TierHash String, SupporterHash String) Uint64
10 IF DEROVALUE() < LOAD(TierHash+"_Amount") THEN GOTO 100
15 IF LOAD(TierHash+"_Available") == 0 THEN GOTO 100
20 IF LOAD(TierHash+"_Amount") == 0 THEN GOTO 50
30 STORE (SupporterHash+"_"+TierHash+"_Expiry",BLOCK_TIMESTAMP()+LOAD(TierHash+"_Interval")*DEROVALUE()/LOAD(TierHash+"_Amount"))
40 GOTO 70
50 STORE (SupporterHash+"_"+TierHash+"_Expiry", BLOCK_TIMESTAMP()+LOAD(TierHash+"_Interval"))
70 STORE (TierHash+"_Available",LOAD(TierHash+"_Available")-1)
75 SEND_DERO_TO_ADDRESS(LOAD(TierHash+"_Address"),DEROVALUE())
80 SEND_ASSET_TO_ADDRESS(SIGNER(),DEROVALUE(),SCID())
99 RETURN 0
100 RETURN 1
End Function
Function TransferProject(Hash String, Owner String) Uint64
10 IF SIGNER() != LOAD(Hash+"_Owner") THEN GOTO 100
20 STORE(Hash+"_Owner", ADDRESS_RAW(Owner))
30 IslandVersionUpdate(Hash)
99 RETURN 0
100 RETURN 1
End Function
Function GetCocos() Uint64
10 SEND_ASSET_TO_ADDRESS(LOAD("Owner"),DEROVALUE()*100,SCID())
20 SEND_DERO_TO_ADDRESS(LOAD("Owner"),DEROVALUE())
99 RETURN 0
End Function
Function BuyCoco() Uint64
10 SEND_ASSET_TO_ADDRESS(SIGNER(),DEROVALUE()*10,SCID())
20 IF EXISTS("treasury") THEN GOTO 40
30 STORE("treasury",DEROVALUE())
35 GOTO 99
40 STORE("treasury",LOAD("treasury")+DEROVALUE())
99 RETURN 0
End Function
Function IslandVersionUpdate(Hash String) Uint64
10 IF SIGNER() != LOAD(Hash+"_Owner") THEN GOTO 100
20 IF EXISTS(Hash+"_Version") THEN GOTO 30 ELSE GOTO 50
30 STORE(Hash+"_Version",LOAD(Hash+"_Version")+1)
40 RETURN 0
50 STORE(Hash+"_Version",0)
60 RETURN 0
100 RETURN 1
End Function
Function Update(code String) Uint64
10 IF SIGNER() != LOAD("Owner") THEN GOTO 100
20 UPDATE_SC_CODE(code)
99 RETURN 0
100 RETURN 1
End Function
' Name:entrypoint Type:string Value:'Update'] |