Skip to content

Commit

Permalink
implement starknet-rs add declare transaction endpoint (#33)
Browse files Browse the repository at this point in the history
  • Loading branch information
saimeunt authored Mar 14, 2024
1 parent 701340b commit fef0f12
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 11 deletions.
68 changes: 61 additions & 7 deletions src/api/rpcspec/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,6 @@ func main() {
fmt.Println("SpecVersion:", specVersion)
}`,
starknetRs: `use starknet::{
providers::{
jsonrpc::{HttpTransport, JsonRpcClient},
Provider, Url,
Expand Down Expand Up @@ -1236,6 +1235,7 @@ const WriteMethods = [
starknetRs: `use starknet::{
core::types::{
BroadcastedInvokeTransaction, BroadcastedInvokeTransactionV1, BroadcastedInvokeTransactionV3,
DataAvailabilityMode, ResourceBoundsMapping, ResourceBounds
},
macros::felt,
providers::{
Expand Down Expand Up @@ -1279,13 +1279,70 @@ async fn main() {
`,
},
// Submit a new class declaration transaction
/* {
{
name: "starknet_addDeclareTransaction",
params: {
declare_transaction: BROADCASTED_DECLARE_TXN,
},
starknetJs: ``,
}, */
starknetGo: ``,
starknetRs: `use std::sync::Arc;
use starknet::{
core::types::{
contract::SierraClass, FieldElement,
BroadcastedDeclareTransaction, BroadcastedDeclareTransactionV2, BroadcastedDeclareTransactionV3,
DataAvailabilityMode, ResourceBoundsMapping, ResourceBounds
},
macros::felt,
providers::{
jsonrpc::{HttpTransport, JsonRpcClient},
Provider, Url,
},
};
#[tokio::main]
async fn main() {
// Sierra class artifact. Output of the "starknet-compile" command
let contract_artifact: SierraClass =
serde_json::from_reader(std::fs::File::open("/path/to/contract/artifact.json").unwrap())
.unwrap();
// We need to flatten the ABI into a string first
let flattened_class = contract_artifact.flatten().unwrap();
let provider = JsonRpcClient::new(HttpTransport::new(
Url::parse("https://free-rpc.nethermind.io/mainnet-juno/").unwrap(),
));
let result = provider
.add_declare_transaction(
BroadcastedDeclareTransaction::V2(
BroadcastedDeclareTransactionV2 {
sender_address: felt!("0x124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49"),
compiled_class_hash: felt!("0x3131fa018d520a037686ce3efddeab8f28895662f019ca3ca18a626650f7d1e"),
max_fee: felt!("0x0"),
signature: vec![
felt!("0x1d4231646034435917d3513cafd6e22ce3ca9a783357137e32b7f52827a9f98"),
felt!("0x61c0b5bae9710c514817c772146dd7509517d2c47fd9bf622370215485ee5af")
],
nonce: felt!("0x0"),
contract_class: Arc::new(flattened_class),
is_query: false
}
)
)
.await;
match result {
Ok(declare_transaction_result) => {
println!("{declare_transaction_result:#?}");
}
Err(err) => {
eprintln!("Error: {err}");
}
}
}
`,
},
// Submit a new deploy account transaction
{
name: "starknet_addDeployAccountTransaction",
Expand All @@ -1297,6 +1354,7 @@ async fn main() {
starknetRs: `use starknet::{
core::types::{
BroadcastedDeployAccountTransaction, BroadcastedDeployAccountTransactionV1, BroadcastedDeployAccountTransactionV3,
DataAvailabilityMode, ResourceBoundsMapping, ResourceBounds
},
macros::felt,
providers::{
Expand Down Expand Up @@ -1516,7 +1574,3 @@ async fn main() {
];

export const Methods = [...ReadMethods, ...TraceMethods, ...WriteMethods];
export const comingSoon = [
"starknet_addDeclareTransaction",
"starknet_addDeployAccountTransaction",
];
11 changes: 7 additions & 4 deletions src/components/Builder.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const formatName = (name: string) => {
const Builder = () => {
const transformParamsToArray = (params: any) => {
const transformParam = (param: any): any => {
if (param.description || param.placeholder) {
if (param.description !== undefined || param.placeholder !== undefined) {
if (param.oneOf) {
return {
description: param.description,
Expand All @@ -61,7 +61,10 @@ const Builder = () => {
placeholder: param.placeholder,
};
}
} else if (!param.placeholder && !param.description) {
} else if (
param.placeholder === undefined &&
param.description === undefined
) {
let params = {};
for (const [key, value] of Object.entries(param)) {
params = {
Expand Down Expand Up @@ -554,7 +557,7 @@ const Builder = () => {
placeholderType: string
) => {
if (typeof placeholder === "number") {
return parseInt(newValue);
return newValue === "0x" ? 0 : parseInt(newValue);
} else if (
Array.isArray(placeholder) ||
(placeholderType && placeholderType === "Array")
Expand Down Expand Up @@ -744,7 +747,7 @@ const Builder = () => {
/>
) : (
<div>
{!value.placeholder && value.value ? (
{value.placeholder === undefined && value.value ? (
<FormatInputField
param={value}
index={index}
Expand Down

0 comments on commit fef0f12

Please sign in to comment.