Skip to content

Instantly share code, notes, and snippets.

@brunjlar
Last active January 22, 2021 15:05
Show Gist options
  • Save brunjlar/4b855e6cf857696097004a98b8fe9855 to your computer and use it in GitHub Desktop.
Save brunjlar/4b855e6cf857696097004a98b8fe9855 to your computer and use it in GitHub Desktop.
Selling Ada
<xml xmlns="https://developers.google.com/blockly/xml"><block type="BaseContractType" id="root_contract" deletable="false" x="13" y="187"><statement name="BaseContractType"><block type="WhenContractType" id="tcf~K:vpj%b}dN.]WEG^"><field name="timeout">1</field><statement name="case"><block type="DepositActionType" id="0(PWomg?{y:Jf@y|H:!C"><value name="from_party"><block type="RolePartyType" id="ty$m{-$9$~ta!8vMNRpx"><field name="role">buyer</field></block></value><value name="value"><block type="ConstantValueType" id="JMtSE}},TrK);~r:/7]g"><field name="constant">1000000000</field></block></value><value name="token"><block type="CustomTokenType" id="LWk}C?]!XaTT;l@9djDE"><field name="currency_symbol">dd</field><field name="token_name">dd</field></block></value><value name="party"><block type="RolePartyType" id="R:_D!h)b-$^{;FHqiZ9`"><field name="role">buyer</field></block></value><statement name="contract"><block type="WhenContractType" id=".*a62qyaufq/B[*$sHiz"><field name="timeout">2</field><statement name="case"><block type="DepositActionType" id="!8Xgo=_2d7yZ#9LROtN}"><value name="from_party"><block type="RolePartyType" id="nz!4((m)Kf!?%%/QL{f8"><field name="role">seller</field></block></value><value name="value"><block type="ConstantValueType" id="/k[NqWntyr_FB`~;.AOI"><field name="constant">1000000000</field></block></value><value name="token"><block type="AdaTokenType" id="86{Ns%IV|Q6UHM~7_pCy"/></value><value name="party"><block type="RolePartyType" id="p95Zh^eLn5]Ls2lTajZ+"><field name="role">seller</field></block></value><statement name="contract"><block type="WhenContractType" id="P6#k93$g~cI,_Us?.@C;"><field name="timeout">3</field><statement name="case"><block type="ChoiceActionType" id="a08IRa$VZrH5hR[:YJ]h"><field name="choice_name">adausdt</field><value name="party"><block type="RolePartyType" id="Dx[xFQEXT$u.*us,-rxn"><field name="role">kraken</field></block></value><statement name="bounds"><block type="BoundsType" id="Xo_#+!cU#}b$r^h7JFrp"><field name="from">1000000</field><field name="to">1000000000</field></block></statement><statement name="contract"><block type="IfContractType" id="A/-mgM$Hxm-J$@1:34*o"><value name="observation"><block type="ValueLEObservationType" id="b;:n8f)(*li26^$uh=a1"><value name="value1"><block type="ScaleValueType" id="_//g2LxX:%)^uX%N^sBb"><field name="numerator">10</field><field name="denominator">1</field><value name="value"><block type="ChoiceValueValueType" id="bPbHrlo4cvT:k`]zfiMY"><field name="choice_name">adausdt</field><value name="party"><block type="RolePartyType" id="xGHzo+hXF-h(B#aL{Z[d"><field name="role">kraken</field></block></value></block></value></block></value><value name="value2"><block type="ConstantValueType" id="h6?dQFB)aQ7.F%P,)TQT"><field name="constant">1000000000</field></block></value></block></value><statement name="contract1"><block type="PayContractType" id="e|qOYS@R7V/-.e^:U2uc"><value name="payee"><block type="PartyPayeeType" id="pqO||689:}VovPmhG0DA"><value name="party"><block type="RolePartyType" id=",!bg/674@Cfq!tG/y~$}"><field name="role">seller</field></block></value></block></value><value name="value"><block type="ScaleValueType" id="Z~~T$SzY(2S`bO~RHZ`}"><field name="numerator">10</field><field name="denominator">1</field><value name="value"><block type="ChoiceValueValueType" id="Y#j[)1A;OCOO0Qm-}:-j"><field name="choice_name">adausdt</field><value name="party"><block type="RolePartyType" id="V7=4izxb`dxdz{n]y#k1"><field name="role">kraken</field></block></value></block></value></block></value><value name="token"><block type="CustomTokenType" id="jYx9$^#S5#fMEhF7ANPg"><field name="currency_symbol">dd</field><field name="token_name">dd</field></block></value><value name="party"><block type="RolePartyType" id="~s`9((ZLp%@GJkE5w7e="><field name="role">buyer</field></block></value><statement name="contract"><block type="PayContractType" id="Vv%}R~;?DAkt~v`BARTr"><value name="payee"><block type="PartyPayeeType" id="ExRyt`Sob+jWQM5.slJN"><value name="party"><block type="RolePartyType" id="w@=Z1!DV0s9r24JkPd,^"><field name="role">buyer</field></block></value></block></value><value name="value"><block type="ConstantValueType" id="3_RA7_K79-BdPTiqX/ll"><field name="constant">1000000000</field></block></value><value name="token"><block type="AdaTokenType" id="EKdB=*#{;?,|MktFEgbQ"/></value><value name="party"><block type="RolePartyType" id="BhhEl`I%ZVj3fH5Y)z!u"><field name="role">seller</field></block></value><statement name="contract"><block type="CloseContractType" id="QPXLVHMR.YH/fgFjr(%!"/></statement></block></statement></block></statement><statement name="contract2"><block type="CloseContractType" id="9s7=*GJX@awW/fO8f7%h"/></statement></block></statement></block></statement><statement name="contract"><block type="CloseContractType" id="?[gAX@!5=1QIxElb?FY8"/></statement></block></statement></block></statement><statement name="contract"><block type="CloseContractType" id="5tXJ@[!P00Z_!;Z#4Vp7"/></statement></block></statement><next><block type="DepositActionType" id="~Z7{0-K-/v[#h2TXWs7#"><value name="from_party"><block type="RolePartyType" id="ML{cD,B~8[dUNt0OL2]2"><field name="role">seller</field></block></value><value name="value"><block type="ConstantValueType" id="?_W.JDH`Dn))yR|WY=bG"><field name="constant">1000000000</field></block></value><value name="token"><block type="AdaTokenType" id="C8pJ=.v_S}o,w%6{bKw^"/></value><value name="party"><block type="RolePartyType" id="Q,GN1T4no]C=%ZWZS[XO"><field name="role">seller</field></block></value><statement name="contract"><block type="WhenContractType" id="kr{-=52j84+DZ#6JzI*5"><field name="timeout">2</field><statement name="case"><block type="DepositActionType" id="=(b0lQplZU6JO%2ALhr0"><value name="from_party"><block type="RolePartyType" id="L3KBY[4@rr`OT%[4iv/]"><field name="role">buyer</field></block></value><value name="value"><block type="ConstantValueType" id="-~(^-#wIde.$}dbkuuL?"><field name="constant">1000000000</field></block></value><value name="token"><block type="CustomTokenType" id="i,u7ht*{FqJO4SL#T0{G"><field name="currency_symbol">dd</field><field name="token_name">dd</field></block></value><value name="party"><block type="RolePartyType" id="~a!Hb2FA,|T@%iW7poI-"><field name="role">buyer</field></block></value><statement name="contract"><block type="WhenContractType" id="B~6u_I5#spOVfy]s6Ks`"><field name="timeout">3</field><statement name="case"><block type="ChoiceActionType" id="rNie-A@meWgh;!OoFNe;"><field name="choice_name">adausdt</field><value name="party"><block type="RolePartyType" id="hrcJ`3+DK0sUc~6o_#N4"><field name="role">kraken</field></block></value><statement name="bounds"><block type="BoundsType" id="*ph[_Av`FS[$;)/Ur{d)"><field name="from">1000000</field><field name="to">1000000000</field></block></statement><statement name="contract"><block type="IfContractType" id=";wFf/{Mw{l+k#T.Z`Y(c"><value name="observation"><block type="ValueLEObservationType" id="%OEIW0s{^Y2e1V-3H?0k"><value name="value1"><block type="ScaleValueType" id="h7=_m/5H`$s?Jky;q7HY"><field name="numerator">10</field><field name="denominator">1</field><value name="value"><block type="ChoiceValueValueType" id="JcyV#5,9v,Gj5zPrWG|z"><field name="choice_name">adausdt</field><value name="party"><block type="RolePartyType" id="w}bYyjYU1PFP(dd/LMx2"><field name="role">kraken</field></block></value></block></value></block></value><value name="value2"><block type="ConstantValueType" id="I9_!fU+pF/QrJ9Pf*QSO"><field name="constant">1000000000</field></block></value></block></value><statement name="contract1"><block type="PayContractType" id="Os;@W`T`^8h%`BsB6}m$"><value name="payee"><block type="PartyPayeeType" id="o(4M?i9*/0/q{ao^#cxd"><value name="party"><block type="RolePartyType" id="8;m.{gGnHt`A?c+Z+25T"><field name="role">seller</field></block></value></block></value><value name="value"><block type="ScaleValueType" id="?!PQW/y2i.(=09PCw2PJ"><field name="numerator">10</field><field name="denominator">1</field><value name="value"><block type="ChoiceValueValueType" id="_9P,fIt!%^/Lt#]ex?`n"><field name="choice_name">adausdt</field><value name="party"><block type="RolePartyType" id="k5tLqN;u1je1h(.}^_3("><field name="role">kraken</field></block></value></block></value></block></value><value name="token"><block type="CustomTokenType" id="*]On|[C{Zm1_`tcd`x/}"><field name="currency_symbol">dd</field><field name="token_name">dd</field></block></value><value name="party"><block type="RolePartyType" id="tcprptZ-u[,rM[8|x+F6"><field name="role">buyer</field></block></value><statement name="contract"><block type="PayContractType" id="C,fEJDy6/J?wx(jT^G(y"><value name="payee"><block type="PartyPayeeType" id=":AsDj%Bdtk3KbGhsv^4H"><value name="party"><block type="RolePartyType" id="Y][H{ftRwR!VX+x*3+^b"><field name="role">buyer</field></block></value></block></value><value name="value"><block type="ConstantValueType" id="%6MReN96c6L2OrEWx=YN"><field name="constant">1000000000</field></block></value><value name="token"><block type="AdaTokenType" id="IMIp`A-F|-2`?inM*Nw*"/></value><value name="party"><block type="RolePartyType" id="avb:k*$X]uW@EjRwKAqE"><field name="role">seller</field></block></value><statement name="contract"><block type="CloseContractType" id="k4,}/.OjhRs}?1/.Gs=u"/></statement></block></statement></block></statement><statement name="contract2"><block type="CloseContractType" id="7V?=XL[k]wAY@sA.})~S"/></statement></block></statement></block></statement><statement name="contract"><block type="CloseContractType" id="nh)fC7lqc-AKqQ,m#kLD"/></statement></block></statement></block></statement><statement name="contract"><block type="CloseContractType" id="m^+K}*ab;Jx}iBr0C#1_"/></statement></block></statement></block></next></block></statement><statement name="contract"><block type="CloseContractType" id="SJu^e.}@iq=g@]|3u2;c"/></statement></block></statement></block></xml>
{-# LANGUAGE OverloadedStrings #-}
module Example where
import Language.Marlowe
import Language.PlutusTx.Ratio (fromGHC)
main :: IO ()
main = print . pretty $ contract
{- Define a contract, Close is the simplest contract which just ends the contract straight away
-}
contract :: Contract
contract = sellAda 1000000000 -- 1,000 ada
1000000000 -- 1,000 usdt
sellAda :: Integer -> Integer -> Contract
sellAda lovelace usdt =
When
[ Case buyerDeposit $
When [Case sellerDeposit bothDeposited] 2 Close
, Case sellerDeposit $
When [Case buyerDeposit bothDeposited] 2 Close
] 1 Close
where
token :: Token
token = Token "dd" "dd"
buyerDeposit, sellerDeposit :: Action
buyerDeposit = Deposit "buyer" "buyer" token $ Constant usdt
sellerDeposit = Deposit "seller" "seller" ada $ Constant lovelace
bothDeposited :: Contract
bothDeposited =
When
[ Case (Choice adausdt [Bound 1000000 1000000000]) $
If (ValueLE amount $ Constant usdt)
(Pay "buyer" (Party "seller") token amount $
Pay "seller" (Party "buyer") ada (Constant lovelace)
Close)
Close
] 3 Close
adausdt :: ChoiceId
adausdt = ChoiceId "adausdt" "kraken"
amount :: Value Observation
amount = Scale (fromGHC $ fromInteger lovelace / 100000000) $ ChoiceValue adausdt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment