Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/blockfrost integration #21

Open
wants to merge 25 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f40d4d0
feat: validations component options and validation interface
mikarasv Apr 5, 2024
4c9265b
feat: remove unused components and add collapsible to tx validations …
mikarasv Apr 5, 2024
f1829d7
feat: structure of validate txs and eras validation scaffolding
mikarasv Apr 5, 2024
cdd7ffa
feat: connection to front end
mikarasv Apr 5, 2024
d44cd58
feat: interfaces added
mikarasv Apr 5, 2024
28d4a11
feat: babbage validations added and era displayed on front
mikarasv Apr 8, 2024
ce07c8c
feat: byron validations added
mikarasv Apr 8, 2024
7914468
fix: tx size validation handle and button fix
mikarasv Apr 9, 2024
cb7e561
feat: validations for shelley era added
mikarasv Apr 9, 2024
3c9c12f
feat: alonzo validations added
mikarasv Apr 9, 2024
3d70eea
Merge branch 'main' into feature/alonzo-checks
mikarasv Apr 10, 2024
c17c69a
feat: validations design and connection with napi validation calls
mikarasv Apr 15, 2024
e82e8e2
feat: ppt params interfaces adapted to new updates in pallas
mikarasv Apr 18, 2024
1482c83
refactor: front end components
mikarasv Apr 18, 2024
a19b718
feat: context and ui validations configurations added
mikarasv Apr 23, 2024
49fae47
style: switch styling
mikarasv Apr 26, 2024
e45685e
fix: ppt params config at the bottom
mikarasv Apr 26, 2024
5b074dc
feat: protocol parameters can be obtained with blockfrost
mikarasv May 6, 2024
95b81fe
style: checkbox component
mikarasv May 7, 2024
29c2453
fix: using states instead of saving on url
mikarasv May 7, 2024
8da804d
fix: using states instead of saving on url
mikarasv May 7, 2024
73b4110
style: fix validations response from pallas and better ui
mikarasv May 10, 2024
fa360ae
feat: utxo set parsing for validations
mikarasv May 21, 2024
e312960
feat: utxo set built using blockfrost response
mikarasv Jun 3, 2024
5cb9aac
fix: unwrap changed with address parsing error handling
mikarasv Jun 4, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion napi-pallas/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ hex = "0.4.3"
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
napi = { version = "2.12.2", default-features = false, features = ["napi4"] }
napi-derive = "2.12.2"
pallas = { git = "https://github.com/alegadea/pallas.git", rev = "54ffc77" , features = ["unstable"]}
pallas = { git = "https://github.com/txpipe/pallas.git", rev = "9f5713c" , features = ["unstable"]}
tokio = { version = "1", features = ["full"] }
blockfrost = "1.0.1"
blockfrost-openapi = "0.0.3"
num-rational = "0.4.0"
num-traits = "0.2.14"
dotenv = "0.15.0"

[build-dependencies]
napi-build = "2.0.1"
Expand Down
52 changes: 50 additions & 2 deletions napi-pallas/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,52 @@ export interface Output {
bytes?: string
address?: AddressDiagnostic
}
export interface ProtocolParams {
epoch: number
minFeeA: number
minFeeB: number
maxBlockSize: number
maxTxSize: number
maxBlockHeaderSize: number
keyDeposit: number
poolDeposit: number
eMax: number
nOpt: number
a0Numerator: number
a0Denominator: number
rhoNumerator: number
rhoDenominator: number
tauNumerator: number
tauDenominator: number
decentralisationParamNumerator: number
decentralisationParamDenominator: number
extraEntropyNumerator: number
extraEntropyDenominator: number
protocolMajorVer: number
protocolMinorVer: number
minUtxo: number
minPoolCost: number
priceMemNumerator: number
priceMemDenominator: number
priceStepNumerator: number
priceStepDenominator: number
maxTxExMem: number
maxTxExSteps: number
maxBlockExMem: number
maxBlockExSteps: number
maxValSize: number
collateralPercent: number
maxCollateralInputs: number
coinsPerUtxoSize: number
coinsPerUtxoWord: number
error?: string
}
export interface ValidationContext {
protocolParams: ProtocolParams
network: string
era: string
blockSlot: number
}
export interface Attribute {
topic?: string
value?: string
Expand All @@ -33,17 +79,19 @@ export interface Section {
children: Array<Section>
}
export function parseAddress(raw: string): Output
export function safeParseBlock(raw: string): Section
export interface SectionValidation {
section: Section
validations: Validations
}
export function safeParseTx(raw: string): SectionValidation
export function safeParseBlock(raw: string): Section
export function safeParseTx(raw: string, context: ValidationContext): SectionValidation
export function getLatestParameters(network: string): ProtocolParams
export interface Validation {
name: string
value: boolean
description: string
}
export interface Validations {
validations: Array<Validation>
era: string
}
5 changes: 3 additions & 2 deletions napi-pallas/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -281,8 +281,9 @@ if (!nativeBinding) {
throw new Error(`Failed to load native binding`)
}

const { parseAddress, safeParseTx, safeParseBlock } = nativeBinding
const { parseAddress, safeParseBlock, safeParseTx, getLatestParameters } = nativeBinding

module.exports.parseAddress = parseAddress
module.exports.safeParseTx = safeParseTx
module.exports.safeParseBlock = safeParseBlock
module.exports.safeParseTx = safeParseTx
module.exports.getLatestParameters = getLatestParameters
97 changes: 87 additions & 10 deletions napi-pallas/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,65 @@ mod block;
mod tx;
mod validations;

#[derive(Default)]
#[napi(object)]
pub struct ProtocolParams {
pub epoch: u32,
pub min_fee_a: u32,
pub min_fee_b: u32,
pub max_block_size: u32,
pub max_tx_size: u32,
pub max_block_header_size: u32,
pub key_deposit: i64,
pub pool_deposit: i64,
pub e_max: i64,
pub n_opt: u32,
pub a0_numerator: i64,
pub a0_denominator: i64,
pub rho_numerator: i64,
pub rho_denominator: i64,
pub tau_numerator: i64,
pub tau_denominator: i64,
pub decentralisation_param_numerator: i64,
pub decentralisation_param_denominator: i64,
pub extra_entropy_numerator: u32,
pub extra_entropy_denominator: u32,
pub protocol_major_ver: i64,
pub protocol_minor_ver: i64,
pub min_utxo: i64,
pub min_pool_cost: i64,
pub price_mem_numerator: i64,
pub price_mem_denominator: i64,
pub price_step_numerator: i64,
pub price_step_denominator: i64,
pub max_tx_ex_mem: u32,
pub max_tx_ex_steps: i64,
pub max_block_ex_mem: u32,
pub max_block_ex_steps: i64,
pub max_val_size: u32,
pub collateral_percent: u32,
pub max_collateral_inputs: u32,
pub coins_per_utxo_size: i64,
pub coins_per_utxo_word: i64,
pub error: Option<String>,
}

impl ProtocolParams {
fn new() -> Self {
Default::default()
}
}

#[derive(Default)]
#[napi(object)]
pub struct ValidationContext {
pub protocol_params: ProtocolParams,

pub network: String,
pub era: String,
pub block_slot: u32,
}

#[derive(Default)]
#[napi(object)]
pub struct Attribute {
Expand Down Expand Up @@ -100,7 +159,7 @@ impl Section {
self
}

fn build_child<F>(mut self, func: F) -> Self
fn build_child<F>(self, func: F) -> Self
where
F: FnOnce() -> Section,
{
Expand Down Expand Up @@ -144,21 +203,30 @@ pub fn parse_address(raw: String) -> address::Output {
}
}

#[napi]
pub fn safe_parse_block(raw: String) -> Section {
match block::parse(raw) {
Ok(x) => x,
Err(x) => x,
}
}

#[derive(Default)]
#[napi(object)]
pub struct SectionValidation {
pub section: Section,
pub validations: Validations,
}

#[tokio::main]
#[napi]
pub fn safe_parse_tx(raw: String) -> SectionValidation {
match tx::parse(raw) {
pub async fn safe_parse_tx(raw: String, context: ValidationContext) -> SectionValidation {
match tx::parse(raw, context).await {
Ok(x) => {
let (section, validations) = x;
SectionValidation {
section,
validations: validations,
validations,
}
}
Err(x) => SectionValidation {
Expand All @@ -168,15 +236,16 @@ pub fn safe_parse_tx(raw: String) -> SectionValidation {
}
}

#[tokio::main]
#[napi]
pub fn safe_parse_block(raw: String) -> Section {
match block::parse(raw) {
Ok(x) => x,
Err(x) => x,
pub async fn get_latest_parameters(network: String) -> ProtocolParams {
match tx::get_epochs_latest_parameters(network).await {
Ok(params) => params,
Err(_) => ProtocolParams::new(),
}
}

#[derive(Default, Debug)]
#[derive(Default)]
#[napi(object)]
pub struct Validation {
pub name: String,
Expand Down Expand Up @@ -208,10 +277,11 @@ impl Validation {
}
}

#[derive(Debug, Default)]
#[derive(Default)]
#[napi(object)]
pub struct Validations {
pub validations: Vec<Validation>,
pub era: String,
}

impl Validations {
Expand All @@ -224,4 +294,11 @@ impl Validations {

self
}

pub fn with_era(self, era: impl ToString) -> Self {
Self {
era: era.to_string(),
..self
}
}
}
Loading
Loading