Skip to content

Commit

Permalink
starting to test fork action on preview
Browse files Browse the repository at this point in the history
  • Loading branch information
MicroProofs committed Jun 6, 2024
1 parent 7122429 commit 01ca40e
Show file tree
Hide file tree
Showing 25 changed files with 275,411 additions and 29 deletions.
274,618 changes: 274,618 additions & 0 deletions V1History.json

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions V1PreviewHistory.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
[
{
"block_number": 0,
"current_hash": "2aa538d5e7849d0e102f86a0ce4498c51c099ef06a61cd59d881d9e44a6c8ef1",
"leading_zeros": 5,
"target_number": 65535,
"epoch_time": 0,
"current_posix_time": 1693072307000
},
{
"block_number": 1,
"current_hash": "000001df8cb64a5c273ff290b9c836c0d075433e12bd1d58b884c8637ee8f758",
"leading_zeros": 5,
"target_number": 65535,
"epoch_time": 556000,
"current_posix_time": 1693072863000,
"nonce": "D9A5487BBFCEAAF6AF04E7168FF64A8F"
},
{
"block_number": 2,
"current_hash": "000000a3d6f6bf984086c05f12f22f9973f258946684242d7f3c62d6360867b7",
"leading_zeros": 5,
"target_number": 65535,
"epoch_time": 1258310000,
"current_posix_time": 1694330617000,
"nonce": "959DE71E873E13D75ABDB2F21E4CCACC"
}
]
2 changes: 1 addition & 1 deletion aiken.lock
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ requirements = []
source = "github"

[etags]
"aiken-lang/fuzz@main" = [{ secs_since_epoch = 1717631234, nanos_since_epoch = 395327000 }, "98cf81aa68f9ccf68bc5aba9be06d06cb1db6e8eff60b668ed5e8ddf3588206b"]
"aiken-lang/fuzz@main" = [{ secs_since_epoch = 1717698560, nanos_since_epoch = 351748000 }, "98cf81aa68f9ccf68bc5aba9be06d06cb1db6e8eff60b668ed5e8ddf3588206b"]
1 change: 1 addition & 0 deletions currentPreviewRoot.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f818d6aba5abf8c471f40ff8d4ad4177b85dadbb453a42c430191091a7e50c7b
1 change: 1 addition & 0 deletions currentRoot.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
08f6adda95e55efab85705f7b3313559db6750f5d7385de9b11d932a8db86204
Binary file added db/000211.log
Binary file not shown.
Binary file added db/000213.ldb
Binary file not shown.
Binary file added db/000214.ldb
Binary file not shown.
Binary file added db/000215.ldb
Binary file not shown.
Binary file added db/000216.ldb
Binary file not shown.
Binary file added db/000217.ldb
Binary file not shown.
Binary file added db/000218.ldb
Binary file not shown.
1 change: 1 addition & 0 deletions db/CURRENT
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MANIFEST-000002
Empty file added db/LOCK
Empty file.
536 changes: 536 additions & 0 deletions db/LOG

Large diffs are not rendered by default.

Binary file added db/MANIFEST-000002
Binary file not shown.
Binary file added dbPreview/000003.log
Binary file not shown.
1 change: 1 addition & 0 deletions dbPreview/CURRENT
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MANIFEST-000002
Empty file added dbPreview/LOCK
Empty file.
1 change: 1 addition & 0 deletions dbPreview/LOG
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2024/06/06-16:06:23.173466 1713f3000 Delete type=3 #1
Binary file added dbPreview/MANIFEST-000002
Binary file not shown.
97 changes: 77 additions & 20 deletions miner/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
type Script,
toHex,
UTxO,
applyDoubleCborEncoding,
} from 'translucent-cardano/index';
import fs from 'fs';
import crypto from 'crypto';
Expand All @@ -22,7 +23,6 @@ import { plus100 } from './sha-gpu';
import {
blake256,
calculateDifficultyNumber,
calculateInterlink,
getDifficulty,
getDifficultyAdjustement,
incrementNonce,
Expand All @@ -31,6 +31,8 @@ import {
sha256,
} from './utils';

import { Store, Trie } from '@aiken-lang/merkle-patricia-forestry';

Object.assign(global, { WebSocket });

// Excludes datum field because it is not needed
Expand Down Expand Up @@ -87,14 +89,8 @@ app
.action(async ({ preview, kupoUrl, ogmiosUrl }) => {
const alwaysLoop = true;

const {
validatorHash: tunav1ValidatorHash,
validatorAddress: tunav1ValidatorAddress,
}: Genesis = JSON.parse(
fs.readFileSync(`genesis/${preview ? 'preview' : 'mainnet'}.json`, {
encoding: 'utf8',
}),
);
// Construct a new trie with on-disk storage under the file path 'db'.
const trie = new Trie(new Store(preview ? 'dbPreview' : 'db'));

const {
tunaV2MintValidator: { validatorHash: tunav2ValidatorHash },
Expand All @@ -103,7 +99,7 @@ app
validatorAddress: tunaV2ValidatorAddress,
},
}: GenesisV2 = JSON.parse(
fs.readFileSync(`genesisV2/${preview ? 'preview' : 'mainnet'}.json`, {
fs.readFileSync(`genesis/${preview ? 'previewV2' : 'mainnetV2'}.json`, {
encoding: 'utf8',
}),
);
Expand Down Expand Up @@ -450,10 +446,19 @@ app
.addOption(ogmiosUrlOption)
.addOption(previewOption)
.action(async ({ preview, ogmiosUrl, kupoUrl }) => {
const [fortunaV1, forkValidator, fortunaV2Mint, fortunaV2Spend] = readValidators();
const fortunaV1: Genesis = JSON.parse(
fs.readFileSync(`genesis/${preview ? 'preview' : 'mainnet'}.json`, {
encoding: 'utf8',
}),
);

const precalculated_merkle_root = '';
const [forkValidator, fortunaV2Mint, fortunaV2Spend] = readValidators();

const forkMerkleRoot = fs.readFileSync(preview ? 'currentPreviewRoot.txt' : 'currentRoot.txt', {
encoding: 'utf-8',
});

console.log(forkMerkleRoot);
const provider = new Kupmios(kupoUrl, ogmiosUrl);
const lucid = await Translucent.new(provider, preview ? 'Preview' : 'Mainnet');
lucid.selectWalletFromSeed(fs.readFileSync('seed.txt', { encoding: 'utf-8' }));
Expand All @@ -469,15 +474,20 @@ app
BigInt(utxos[0].outputIndex),
]);

const fortunaV1Hash = lucid.utils.validatorToScriptHash(fortunaV1);
console.log('here222');
const fortunaV1Hash = fortunaV1.validatorHash;

const fortunaV1Address = lucid.utils.validatorToAddress(fortunaV1);
const fortunaV1Address = fortunaV1.validatorAddress;

const forkValidatorApplied: Script = {
type: 'PlutusV2',
script: applyParamsToScript(forkValidator.script, [initOutputRef, fortunaV1Hash]),
script: applyDoubleCborEncoding(
applyParamsToScript(forkValidator.script, [initOutputRef, fortunaV1Hash]),
),
};

console.log('here22211111');

const forkValidatorHash = lucid.utils.validatorToScriptHash(forkValidatorApplied);

const forkValidatorRewardAddress = lucid.utils.validatorToRewardAddress(forkValidatorApplied);
Expand All @@ -486,14 +496,20 @@ app

const tunaV2MintApplied: Script = {
type: 'PlutusV2',
script: applyParamsToScript(fortunaV2Mint.script, [fortunaV1Hash, forkValidatorHash]),
script: applyDoubleCborEncoding(
applyParamsToScript(fortunaV2Mint.script, [fortunaV1Hash, forkValidatorHash]),
),
};

console.log('here222333');

const tunaV2MintAppliedHash = lucid.utils.validatorToScriptHash(tunaV2MintApplied);

const tunaV2SpendApplied: Script = {
type: 'PlutusV2',
script: applyParamsToScript(fortunaV2Spend.script, [tunaV2MintAppliedHash]),
script: applyDoubleCborEncoding(
applyParamsToScript(fortunaV2Spend.script, [tunaV2MintAppliedHash]),
),
};

const tunaV2SpendAppliedHash = lucid.utils.validatorToScriptHash(tunaV2SpendApplied);
Expand All @@ -507,6 +523,7 @@ app
const lastestV1BlockData = Data.from(lastestV1Block.datum!) as Constr<
string | bigint | string[]
>;
console.log('here4343');

const [
bn,
Expand Down Expand Up @@ -554,25 +571,36 @@ app
target_number,
epoch_time,
current_posix_time,
precalculated_merkle_root,
forkMerkleRoot,
]),
);

const fortunaRedeemer = Data.to(new Constr(0, []));

console.log('here56845485');

const tx = await lucid
.newTx()
.attachSpendingValidator(tunaV2SpendApplied)
.attachMintingPolicy(tunaV2MintApplied)
.attachMintingPolicy(forkValidatorApplied)
.attachWithdrawalValidator(forkValidatorApplied)
.readFrom([lastestV1Block])
.registerStake(forkValidatorRewardAddress)
.withdraw(forkValidatorRewardAddress, 0n, forkRedeemer)
.mintAssets(forkLockToken, forkMintRedeemer)
.mintAssets(masterTokensV2, fortunaRedeemer)
.payToContract(forkValidatorAddress, { inline: lockState }, forkLockToken)
.payToContract(fortunaV2Address, { inline: fortunaState }, masterTokensV2)

.complete();

console.log('here8888');

const signed = await tx.sign().complete();

console.log('here9999');

try {
await signed.submit();

Expand All @@ -583,7 +611,7 @@ app
console.log(`Completed and saving genesis file.`);

fs.writeFileSync(
`genesisV2/${preview ? 'preview' : 'mainnet'}.json`,
`genesis/${preview ? 'previewV2' : 'mainnetV2'}.json`,
JSON.stringify({
forkValidator: {
validator: forkValidator.script,
Expand Down Expand Up @@ -622,6 +650,35 @@ app
console.log(`Miner wallet initialized and saved to seed.txt`);
});

app
.command('createMerkleRoot')
.description('Create and output the merkle root of the fortuna blockchain')
.addOption(kupoUrlOption)
.addOption(ogmiosUrlOption)
.addOption(previewOption)
.action(async ({ preview, kupoUrl, ogmiosUrl }) => {
// Construct a new trie with on-disk storage under the file path 'db'.
const trie = new Trie(new Store(preview ? 'dbPreview' : 'db'));

const headerHashes = JSON.parse(
fs.readFileSync(preview ? 'V1PreviewHistory.json' : 'V1History.json', 'utf8'),
);

for (const header of headerHashes) {
const hash = await blake256(fromHex(header.current_hash as string));

await trie.insert(Buffer.from(hash), Buffer.from(fromHex(header.current_hash)));
}

const root = trie.hash.toString('hex');

fs.writeFileSync(preview ? 'currentPreviewRoot.txt' : 'currentRoot.txt', root, {
encoding: 'utf-8',
});

console.log(`Current root written to currentRoot.txt`);
});

app
.command('address')
.description('Check address balance')
Expand Down Expand Up @@ -650,7 +707,7 @@ app
encoding: 'utf8',
});

const genesisFileV2 = fs.readFileSync(`genesisV2/${preview ? 'preview' : 'mainnet'}.json`, {
const genesisFileV2 = fs.readFileSync(`genesis/${preview ? 'previewV2' : 'mainnetV2'}.json`, {
encoding: 'utf8',
});

Expand Down
11 changes: 3 additions & 8 deletions miner/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,27 +32,22 @@ export function readValidator(): SpendingValidator {
}

export function readValidators(): SpendingValidator[] {
const fortunaV1 = blueprint.validators.filter((v) => v.title === 'tunav1.spend')[0];
const forkValidator = blueprint.validators.filter((v) => v.title === 'simplerfork.fork')[0];
const fortunaV2Mint = blueprint.validators.filter((v) => v.title === 'tunav2.tuna')[0];
const fortunaV2Spend = blueprint.validators.filter((v) => v.title === 'tunav2.mine')[0];

return [
{
type: 'PlutusV2',
script: toHex(cbor.encode(fromHex(fortunaV1.compiledCode))),
script: forkValidator.compiledCode,
},
{
type: 'PlutusV2',
script: toHex(cbor.encode(fromHex(forkValidator.compiledCode))),
script: fortunaV2Mint.compiledCode,
},
{
type: 'PlutusV2',
script: toHex(cbor.encode(fromHex(fortunaV2Mint.compiledCode))),
},
{
type: 'PlutusV2',
script: toHex(cbor.encode(fromHex(fortunaV2Spend.compiledCode))),
script: fortunaV2Spend.compiledCode,
},
];
}
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
},
"type": "module",
"dependencies": {
"@aiken-lang/merkle-patricia-forestry": "^1.0.1",
"@dcspark/cardano-multiplatform-lib-nodejs": "^5.2.0",
"d3-array": "^3.2.4",
"d3-scale": "^4.0.2",
Expand Down
Loading

0 comments on commit 01ca40e

Please sign in to comment.