use aiken/hash.{blake2b_256, sha2_256}
use aiken/interval.{Finite, Interval, IntervalBound}
InlineDatum, Mint, Output, OutputReference, ScriptContext, Spend, Transaction,
use aiken/transaction/credential.{Address, Inline, ScriptCredential}
-
use aiken/transaction/value.{tokens}
+
use aiken/transaction/value.{Value, tokens}
use fortuna/parameters.{epoch_number, halving_number, initial_payout}
use fortuna/types.{State}
use fortuna/utils.{list_at, quantity_of}
+
FailedFork, ForkDatum, Forked, GlobalLockState, HardForkState, LockStateType,
+
Miner, NftState, NotForked, Regular,
-
Nft(ByteArray, ByteArray)
+
Nft { policy: ByteArray, name: ByteArray, output_index: Int }
-
nft_input_ref: Option<OutputReference>,
-
difficulty_number: Int,
expect ScriptCredential(own_validator_hash) = credential
-
let MineAction { nonce, miner, nft_input_ref } = redeemer
+
let MineAction { nonce, miner } = redeemer
// Spend(0) requirement: Contract has only one output with the master token going back to itself
expect Some(own_output) =
Pkh(signer) -> list.has(transaction.extra_signatories, signer)
-
Nft(nft_policy, nft_name) -> {
-
expect Some(input_ref) = nft_input_ref
+
Nft { policy: nft_policy, name: nft_name, output_index } -> {
-
utils.resolve_output_reference(inputs, input_ref).value
+
utils.list_at(outputs, output_index).value
|> quantity_of(nft_policy, nft_name)
-
// Spend(2) requirement: Input has nft
+
// Spend(2) requirement: Output has nft
miner: blake2b_256(builtin.serialise_data(miner)),
-
let (found_difficulty_number, found_leading_zeros) =
+
let (found_target_number, found_leading_zeros) =
fortuna.format_found_bytearray(found_bytearray)
(found_leading_zeros > leading_zeros)?,
(found_leading_zeros == leading_zeros)?,
-
(found_difficulty_number < difficulty_number)?,
+
(found_target_number < target_number)?,
if halving_exponent > 29 {
-
initial_payout / fortuna.two_exponential(halving_exponent)
+
initial_payout / math.pow2(halving_exponent)
// Spend(5) requirement: Minted token is the correct name and amount
block_number: out_block_number,
current_hash: out_current_hash,
leading_zeros: out_leading_zeros,
-
difficulty_number: out_difficulty_number,
+
target_number: out_target_number,
epoch_time: out_epoch_time,
current_posix_time: out_current_posix_time,
interlink: out_interlink,
// Now use ratio to find new leading zeros difficulty
let (new_difficulty, new_leading_zeroes) =
fortuna.get_new_difficulty(
(new_leading_zeroes == out_leading_zeros)?,
-
(new_difficulty == out_difficulty_number)?,
+
(new_difficulty == out_target_number)?,
(leading_zeros == out_leading_zeros)?,
-
(difficulty_number == out_difficulty_number)?,
+
(target_number == out_target_number)?,
(new_epoch_time == out_epoch_time)?,
-
found_difficulty_number,
-
HardForkState { status: HardForkStatus, fork_block_height: Int }
-
GlobalLockState { locked_tuna: Int, lock_state_type: LockStateType }
-
NftState { nft_key: ByteArray }
+
pub type NftForkAction {
hard_fork_state_ref: OutputReference,
-
out_key_index: Option<Int>,
-
fortuna_v1_input_ref: Option<OutputReference>,
+
miner_output: Option<Int>,