Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
j-mueller committed Jan 4, 2024
1 parent 62713d6 commit 371a447
Show file tree
Hide file tree
Showing 31 changed files with 292 additions and 484 deletions.
86 changes: 13 additions & 73 deletions .github/workflows/ci-linux.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ on:
tags: [ "*.*.*" ]
pull_request:

concurrency:
group: ${{ github.ref }}
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-latest
Expand All @@ -15,93 +19,29 @@ jobs:
sudo apt-get update
sudo apt-get install -y libsystemd-dev
# cache libsodium
- name: cache libsodium-1.0.18
id: libsodium
uses: actions/cache@v2
with:
path: ~/libsodium-stable
key: ${{ runner.os }}-libsodium-1.0.18

# install libsodium with cache
- name: Install cache libsodium-1.0.18
if: steps.libsodium.outputs.cache-hit == 'true'
run: cd ~/libsodium-stable && ./configure && make -j2 && sudo make install

# download & install libsodium without cache
- name: Install libsodium
if: steps.libsodium.outputs.cache-hit != 'true'
run: |
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable.tar.gz
tar -xvzf libsodium-1.0.18-stable.tar.gz -C ~
cd ~/libsodium-stable
./configure
make -j2 && make check
sudo make install
cd -
# cache secp256K1
- name: cache libsecp256k1
id: libsecp256k1
uses: actions/cache@v2
with:
path: ~/secp256k1
key: libsecp256k1

# install libsecp256k1 with cache
- name: Install cache libsecp256k1
if: steps.libsecp256k1.outputs.cache-hit == 'true'
run: |
cd ~/secp256k1
./autogen.sh
./configure --enable-module-schnorrsig --enable-experimental
make
sudo make install
cd -
# download & install secp256k1
- name: Install libsecp256k1
if: steps.libsecp256k1.outputs.cache-hit != 'true'
run: |
git clone https://github.com/bitcoin-core/secp256k1 ~/secp256k1
cd ~/secp256k1
git checkout ac83be33
./autogen.sh
./configure --enable-module-schnorrsig --enable-experimental
make
sudo make install
cd -
# set up environment variables
- name: Setup environment variables
run: |
echo "LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
- name: Install system dependencies
uses: input-output-hk/actions/base@latest

- uses: actions/checkout@v2

- uses: haskell-actions/setup@v2
id: setuphaskell
id: cabal-setup
with:
ghc-version: '9.2.8'
ghc-version: '9.6.3'
cabal-version: '3.10.1.0'

- uses: actions/checkout@v4

- name: Cache .cabal
uses: actions/cache@v3
with:
path: ${{ steps.setuphaskell.outputs.cabal-store }}
path: ${{ steps.cabal-setup.outputs.cabal-store }}
key: cabal-${{ hashFiles('cabal.project') }}

- name: Set up cabal.project.local
run: |
echo "package cardano-crypto-praos" > cabal.project.local
echo " flags: -external-libsodium-vrf" >> cabal.project.local
- name: Build dependencies for integration test
run: |
cabal update
cabal install -j cardano-node-8.1.1 --overwrite-policy=always
cabal install -j cardano-cli-8.4.0.0 --overwrite-policy=always
cabal install -j cardano-node-8.7.2 --overwrite-policy=always
cabal install -j cardano-cli-8.17.0.0 --overwrite-policy=always
cabal install -j convex-wallet --overwrite-policy=always
echo "/home/runner/.cabal/bin" >> $GITHUB_PATH
Expand Down
78 changes: 7 additions & 71 deletions .github/workflows/gh-pages.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,88 +16,24 @@ jobs:
sudo apt-get update
sudo apt-get install -y libsystemd-dev
# cache libsodium
- name: cache libsodium-1.0.18
id: libsodium
uses: actions/cache@v2
with:
path: ~/libsodium-stable
key: ${{ runner.os }}-libsodium-1.0.18

# install libsodium with cache
- name: Install cache libsodium-1.0.18
if: steps.libsodium.outputs.cache-hit == 'true'
run: cd ~/libsodium-stable && ./configure && make -j2 && sudo make install

# download & install libsodium without cache
- name: Install libsodium
if: steps.libsodium.outputs.cache-hit != 'true'
run: |
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable.tar.gz
tar -xvzf libsodium-1.0.18-stable.tar.gz -C ~
cd ~/libsodium-stable
./configure
make -j2 && make check
sudo make install
cd -
- name: Install system dependencies
uses: input-output-hk/actions/base@latest

# cache secp256K1
- name: cache libsecp256k1
id: libsecp256k1
uses: actions/cache@v2
with:
path: ~/secp256k1
key: libsecp256k1

# install libsecp256k1 with cache
- name: Install cache libsecp256k1
if: steps.libsecp256k1.outputs.cache-hit == 'true'
run: |
cd ~/secp256k1
./autogen.sh
./configure --enable-module-schnorrsig --enable-experimental
make
sudo make install
cd -
# download & install secp256k1
- name: Install libsecp256k1
if: steps.libsecp256k1.outputs.cache-hit != 'true'
run: |
git clone https://github.com/bitcoin-core/secp256k1 ~/secp256k1
cd ~/secp256k1
git checkout ac83be33
./autogen.sh
./configure --enable-module-schnorrsig --enable-experimental
make
sudo make install
cd -
# set up environment variables
- name: Setup environment variables
run: |
echo "LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
- uses: actions/checkout@v2

- uses: haskell-actions/setup@v2
id: setuphaskell
id: cabal-setup
with:
ghc-version: '9.2.8'
ghc-version: '9.6.3'
cabal-version: '3.10.1.0'

- uses: actions/checkout@v4

- name: Cache .cabal
uses: actions/cache@v3
with:
path: ${{ steps.setuphaskell.outputs.cabal-store }}
path: ${{ steps.cabal-setup.outputs.cabal-store }}
key: cabal-haddocks-${{ hashFiles('cabal.project') }}

- name: Set up cabal.project.local
run: |
echo "package cardano-crypto-praos" > cabal.project.local
echo " flags: -external-libsodium-vrf" >> cabal.project.local
- name: Build haddocks
run: |
cabal update
Expand Down
20 changes: 8 additions & 12 deletions cabal.project
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@

-- Custom repository for cardano haskell packages, see
-- https://github.com/input-output-hk/cardano-haskell-packages
-- https://github.com/IntersectMBO/cardano-haskell-packages
-- for more information.
repository cardano-haskell-packages
url: https://input-output-hk.github.io/cardano-haskell-packages
url: https://chap.intersectmbo.org/
secure: True
root-keys:
3e0cce471cf09815f930210f7827266fd09045445d65923e6d0238a6cd15126f
Expand All @@ -14,11 +14,14 @@ repository cardano-haskell-packages
d4a35cd3121aa00d18544bb0ac01c3e1691d618f462c46129271bccf39f7e8ee

index-state:
, hackage.haskell.org 2023-07-22T22:41:49Z
, cardano-haskell-packages 2023-07-26T01:36:26Z
, hackage.haskell.org 2023-11-20T23:52:53Z
, cardano-haskell-packages 2023-12-08T09:30:26Z

with-compiler: ghc-9.6.3

with-compiler: ghc-9.2.8
constraints:
cardano-api == 8.36.1.1,
cardano-node == 8.7.2

packages:
src/base
Expand All @@ -27,10 +30,3 @@ packages:
src/mockchain
src/coin-selection
src/devnet

-- https://github.com/obsidiansystems/dependent-sum-template/issues/5
-- requires cabal 3.10
if impl(ghc >= 9.2)
constraints :
dependent-sum-template < 0.1.2

5 changes: 3 additions & 2 deletions src/base/convex-base.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ library
either-result

build-depends:
cardano-api == 8.8.0.0,
cardano-api,
cardano-ledger-core,
cardano-crypto-wrapper,

Expand All @@ -73,4 +73,5 @@ library
serialise,
bytestring,
dlist,
either-result
either-result,
strict-sop-core
36 changes: 18 additions & 18 deletions src/base/lib/Convex/BuildTx.hs
Original file line number Diff line number Diff line change
Expand Up @@ -280,23 +280,23 @@ addAuxScript :: MonadBuildTx m => C.ScriptInEra C.BabbageEra -> m ()
addAuxScript s = addBtx (over (L.txAuxScripts . L._TxAuxScripts) ((:) s))

payToAddressTxOut :: C.AddressInEra C.BabbageEra -> C.Value -> C.TxOut C.CtxTx C.BabbageEra
payToAddressTxOut addr vl = C.TxOut addr (C.TxOutValue C.MultiAssetInBabbageEra vl) C.TxOutDatumNone C.ReferenceScriptNone
payToAddressTxOut addr vl = C.TxOut addr (C.TxOutValueShelleyBased C.ShelleyBasedEraBabbage $ C.toMaryValue vl) C.TxOutDatumNone C.ReferenceScriptNone

payToAddress :: MonadBuildTx m => C.AddressInEra C.BabbageEra -> C.Value -> m ()
payToAddress addr vl = addBtx $ over L.txOuts ((:) (payToAddressTxOut addr vl))

payToPublicKey :: MonadBuildTx m => NetworkId -> Hash PaymentKey -> C.Value -> m ()
payToPublicKey network pk vl =
let val = C.TxOutValue C.MultiAssetInBabbageEra vl
addr = C.makeShelleyAddressInEra network (C.PaymentCredentialByKey pk) C.NoStakeAddress
let val = C.TxOutValueShelleyBased C.ShelleyBasedEraBabbage $ C.toMaryValue vl
addr = C.makeShelleyAddressInEra C.ShelleyBasedEraBabbage network (C.PaymentCredentialByKey pk) C.NoStakeAddress
txo = C.TxOut addr val C.TxOutDatumNone C.ReferenceScriptNone
in prependTxOut txo

payToScriptHash :: MonadBuildTx m => NetworkId -> ScriptHash -> HashableScriptData -> C.StakeAddressReference -> C.Value -> m ()
payToScriptHash network script datum stakeAddress vl =
let val = C.TxOutValue C.MultiAssetInBabbageEra vl
addr = C.makeShelleyAddressInEra network (C.PaymentCredentialByScript script) stakeAddress
dat = C.TxOutDatumInTx C.ScriptDataInBabbageEra datum
let val = C.TxOutValueShelleyBased C.ShelleyBasedEraBabbage $ C.toMaryValue vl
addr = C.makeShelleyAddressInEra C.ShelleyBasedEraBabbage network (C.PaymentCredentialByScript script) stakeAddress
dat = C.TxOutDatumInTx C.AlonzoEraOnwardsBabbage datum
txo = C.TxOut addr val dat C.ReferenceScriptNone
in prependTxOut txo

Expand All @@ -314,8 +314,8 @@ payToPlutusV2 network s datum stakeRef vl =

payToPlutusV2InlineBase :: MonadBuildTx m => C.AddressInEra C.BabbageEra -> C.PlutusScript C.PlutusScriptV2 -> C.TxOutDatum C.CtxTx C.BabbageEra -> C.Value -> m ()
payToPlutusV2InlineBase addr script dat vl =
let refScript = C.ReferenceScript C.ReferenceTxInsScriptsInlineDatumsInBabbageEra (C.toScriptInAnyLang $ C.PlutusScript C.PlutusScriptV2 script)
txo = C.TxOut addr (C.TxOutValue C.MultiAssetInBabbageEra vl) dat refScript
let refScript = C.ReferenceScript C.BabbageEraOnwardsBabbage (C.toScriptInAnyLang $ C.PlutusScript C.PlutusScriptV2 script)
txo = C.TxOut addr (C.TxOutValueShelleyBased C.ShelleyBasedEraBabbage $ C.toMaryValue vl) dat refScript
in prependTxOut txo

payToPlutusV2Inline :: MonadBuildTx m => C.AddressInEra C.BabbageEra -> PlutusScript PlutusScriptV2 -> C.Value -> m ()
Expand All @@ -324,38 +324,38 @@ payToPlutusV2Inline addr script vl = payToPlutusV2InlineBase addr script C.TxOut
{-| same as payToPlutusV2Inline but also specify an inline datum -}
payToPlutusV2InlineWithInlineDatum :: forall a m. (MonadBuildTx m, Plutus.ToData a) => C.AddressInEra C.BabbageEra -> C.PlutusScript C.PlutusScriptV2 -> a -> C.Value -> m ()
payToPlutusV2InlineWithInlineDatum addr script datum vl =
let dat = C.TxOutDatumInline C.ReferenceTxInsScriptsInlineDatumsInBabbageEra (toHashableScriptData datum)
let dat = C.TxOutDatumInline C.BabbageEraOnwardsBabbage (toHashableScriptData datum)
in payToPlutusV2InlineBase addr script dat vl

{-| same as payToPlutusV2Inline but also specify a datum -}
payToPlutusV2InlineWithDatum :: forall a m. (MonadBuildTx m, Plutus.ToData a) => C.AddressInEra C.BabbageEra -> C.PlutusScript C.PlutusScriptV2 -> a -> C.Value -> m ()
payToPlutusV2InlineWithDatum addr script datum vl =
let dat = C.TxOutDatumInTx C.ScriptDataInBabbageEra (toHashableScriptData datum)
let dat = C.TxOutDatumInTx C.AlonzoEraOnwardsBabbage (toHashableScriptData datum)
in payToPlutusV2InlineBase addr script dat vl

payToPlutusV2InlineDatum :: forall a m. (MonadBuildTx m, Plutus.ToData a) => NetworkId -> PlutusScript PlutusScriptV2 -> a -> C.StakeAddressReference -> C.Value -> m ()
payToPlutusV2InlineDatum network script datum stakeRef vl =
let val = C.TxOutValue C.MultiAssetInBabbageEra vl
let val = C.TxOutValueShelleyBased C.ShelleyBasedEraBabbage $ C.toMaryValue vl
sh = C.hashScript (C.PlutusScript C.PlutusScriptV2 script)
addr = C.makeShelleyAddressInEra network (C.PaymentCredentialByScript sh) stakeRef
dat = C.TxOutDatumInline C.ReferenceTxInsScriptsInlineDatumsInBabbageEra (toHashableScriptData datum)
addr = C.makeShelleyAddressInEra C.ShelleyBasedEraBabbage network (C.PaymentCredentialByScript sh) stakeRef
dat = C.TxOutDatumInline C.BabbageEraOnwardsBabbage (toHashableScriptData datum)
txo = C.TxOut addr val dat C.ReferenceScriptNone
in prependTxOut txo
-- TODO: Functions for building outputs (Output -> Output)

setScriptsValid :: MonadBuildTx m => m ()
setScriptsValid = addBtx $ set L.txScriptValidity (C.TxScriptValidity C.TxScriptValiditySupportedInBabbageEra C.ScriptValid)
setScriptsValid = addBtx $ set L.txScriptValidity (C.TxScriptValidity C.AlonzoEraOnwardsBabbage C.ScriptValid)

{-| Set the Ada component in an output's value to at least the amount needed to cover the
minimum UTxO deposit for this output
-}
setMinAdaDeposit :: C.BundledProtocolParameters C.BabbageEra -> C.TxOut C.CtxTx C.BabbageEra -> C.TxOut C.CtxTx C.BabbageEra
setMinAdaDeposit :: C.LedgerProtocolParameters C.BabbageEra -> C.TxOut C.CtxTx C.BabbageEra -> C.TxOut C.CtxTx C.BabbageEra
setMinAdaDeposit params txOut =
let minUtxo = minAdaDeposit params txOut
in txOut & over (L._TxOut . _2 . L._TxOutValue . L._Value . at C.AdaAssetId) (maybe (Just minUtxo) (Just . max minUtxo))

minAdaDeposit :: C.BundledProtocolParameters C.BabbageEra -> C.TxOut C.CtxTx C.BabbageEra -> C.Quantity
minAdaDeposit params txOut =
minAdaDeposit :: C.LedgerProtocolParameters C.BabbageEra -> C.TxOut C.CtxTx C.BabbageEra -> C.Quantity
minAdaDeposit (C.LedgerProtocolParameters params) txOut =
let minAdaValue = C.Quantity 3_000_000
txo = txOut
-- set the Ada value to a dummy amount to ensure that it is not 0 (if it was 0, the size of the output
Expand All @@ -367,7 +367,7 @@ minAdaDeposit params txOut =

{-| Apply 'setMinAdaDeposit' to all outputs
-}
setMinAdaDepositAll :: MonadBuildTx m => C.BundledProtocolParameters C.BabbageEra -> m ()
setMinAdaDepositAll :: MonadBuildTx m => C.LedgerProtocolParameters C.BabbageEra -> m ()
setMinAdaDepositAll params = addBtx $ over (L.txOuts . mapped) (setMinAdaDeposit params)

{-| Add a public key hash to the list of required signatures.
Expand Down
Loading

0 comments on commit 371a447

Please sign in to comment.