Giter Site home page Giter Site logo

lasr's Introduction

VRRB Logo

Versatus is the Universal dApp Engine, unlocking decentralized development beyond smart contracts.

With Versatus, you can create full-stack applications in your preferred programming languages with your favorite development tools. Follow our three-step process to develop, deploy and dynamically scale yoru app on our network.

More devs. More dApps. More Users.




nowthatsflexible.gif



Versatus is a permissionless network, be they operators, developers, users or some combination thereof, Versatus is decentralized, censorship resistant and accessible to anyone with an internet connection.



Scroll to the bottom for information on how to start a node.

High Level Roadmap

This is extremely high level, for each Epic there are multiple features and under each feature there are many stories and tasks

Items that are more than 50% complete are marked with ๐Ÿšง while items that are less than 50% complete are marked as โŒ, all items marked with โœ… are complete, tested, and integrated into the node runtime

๐Ÿ”— : Alphanet ๐Ÿ“ถ Betanet ๐Ÿ’ป Devnet

Epic Description State Network
Network P2P Network enabling communication between network participants โœ… ๐Ÿ”—
Election Proof of Claim Algorithm Implementation and Integration โœ… ๐Ÿ”—
Genesis Quorum Protocol Formation of the first quorums at Genesis event โœ… ๐Ÿ”—
Key Generator Protocol to generate Dealerless Distributed Keypairs for validator nodes, and ECDSA keypairs for all nodes โœ… ๐Ÿ”—
State Store Left-Right Wrapped Accounts Database and State Trie โœ… ๐Ÿ”—
Mempool Left-Right Wrapped Pending Transaction Store โœ… ๐Ÿ”—
Validator Unit Left-Right enabled transaction validation protocol โœ… ๐Ÿ”—
Farmer-Harvester Farmer-Havester Quorum model for secure parallel execution and validation of transactions โœ… ๐Ÿ”—
DAG Rounds based Directed Acyclic Graph to append blocks to โœ… ๐Ÿ”—
Miner Unit Protocol for consolidating proposal blocks produced by miners into a single point of reference signifying the end of a round and finality of transactions (once certified) โœ… ๐Ÿ”—
Scheduler Decentralized task buffer and allocator to maximize efficiency of Farmer Quorum nodes โœ… ๐Ÿ”—
Block Production Enables harvesters to produce conflict minimized, extractable value maximized proposal blocks to be appended to the DAG โœ… ๐Ÿ”—
Node CLI Provides an interface for operators to spin up a Versatus node โœ… ๐Ÿ”—
Wallet CLI Provides an interface for users to interact with the Versatus network ๐Ÿšง ๐Ÿ”—
Token Emission Protocol Ensures that the proper number of tokens in each block and epoch are produced โœ… ๐Ÿ“ถ
Fee Model Provides economic incentives to operators beyond emission subsidy, provides token burning to limit inflation, and economic incentives to maintain speed at scale โŒ ๐Ÿ“ถ
Reputation Tracking Tracks the reputation of nodes, and the message credits, to align incentives, reduce malicious behavior and allow for dynamic stake calculation to prevent accumulation and centralization of staking nodes ๐Ÿšง ๐Ÿ“ถ
Dynamic Stake Calculator Protocol to calculate the minimum required stake of nodes in the network in order for the given nodes to become eligible as validators โŒ ๐Ÿ“ถ
Block Indexer Indexes, sequences and stores blocks for display in UIs that need access to block and transaction data ๐Ÿšง ๐Ÿ“ถ
Block Explorer Provides a web based user interface for scanning blocks, tracking transactions, etc. ๐Ÿšง ๐Ÿ“ถ
Node Metrics Tracks the performance of a given node, cluster of nodes, and/or all nodes in the network โŒ ๐Ÿ“ถ
Rent Model Provides economic incentives to developers to build small, modular programs that do one thing well, and link them together by returning commands to the orchestration network. โŒ ๐Ÿ’ป
Whistleblower Protocol Protocol for reporting malicious behavior, and initiating a stake slashing vote โŒ ๐Ÿ’ป
Wallet GUI Provides a user interface for interacting with Versatus network โŒ ๐Ÿ’ป
Unikernel Compute Runtime Enables programming language agnostic compute in the Versatus network โŒ ๐Ÿ’ป

Starting a Node

In order to start a node, run cargo run Running cargo run -- -help will display available cli flags for node configuration and management.

The above builds and runs a Versatus node in debug mode to run in optimized release mode you must first build the release target using the following command:

git clone https://github.com/versatus/versatus
cd /path/to/cloned/repo
cargo build --release

This will produce a target file (and directory if this is your first time running cargo run or cargo build in this repo.

Then, to display the available CLI flags, you can run:

cd target/release
./versatus -help

lasr's People

Contributors

andrewvious avatar asmithowl avatar eureka-cpu avatar mikehostetler avatar mitch-vrrb avatar mtaish avatar noodlesamachan avatar sezna avatar vinay10949 avatar vsawant10949 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

lasr's Issues

feat: Stress Test LASR

Describe the feature you'd like to request

Write tests to:

  • Determine maximum reliable throughput of lasr with varying loads
  • Profile system resource usage with varying loads (use to size nodes/min configuration properties)
  • Ensure sustained loads are handled properly for long periods of time
  • Ensure spikes above the maximum load are handled within an expected time

Describe the solution you'd like to see

Creation of a LASR node and multiple nodes/processes spawning input test data and verifying that their result can be verified on-chain before some amount of time expires. This might have separate test submission and validation processes where the submitters send their expected output to the validation process which can listen for the result.

Additional information

No response

DA client error attempting to retrieve account

Am trying to deploy a program (NFT), which it doesn't seem to want to do.. was tailing the logs and then just saw this:

lasr   | 2024-04-01T06:26:52.646Z WARN  [lasr_types::signing] using r: [153, 131, 7, 170, 31, 100, 21, 168, 110, 66, 210, 204, 181, 176, 85, 85, 97, 190, 148, 203, 114, 154, 19, 71, 230, 198, 51, 179, 97, 193, 146, 217] and s: [118, 248, 126, 235, 46, 130, 92, 207, 191, 64, 232, 98, 142, 240, 202, 1, 27, 223, 44, 38, 145, 134, 186, 125, 180, 205, 2, 254, 120, 27, 118, 30] with recovery_id: 1 to convert to secp256k1 signature
lasr   | 2024-04-01T06:26:52.646Z WARN  [lasr_types::account] attempting to recover address from public key
lasr   | 2024-04-01T06:26:54.147Z WARN  [lasr_actors::pending_transactions] Attempting to clean pending graph
lasr   | 2024-04-01T06:27:09.148Z WARN  [lasr_actors::pending_transactions] Attempting to clean pending graph
lasr   | 2024-04-01T06:27:21.067Z WARN  [lasr_actors::helpers] checking DA for account
lasr   | 2024-04-01T06:27:21.148Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.230Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.230Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.306Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.307Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.384Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.384Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.457Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.457Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.535Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.535Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.614Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.614Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.682Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.682Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.762Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.762Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.837Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.837Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.914Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.914Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:21.989Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:21.989Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.066Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.066Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.143Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.143Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.218Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.218Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.275Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.275Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.354Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.354Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.426Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.426Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.504Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.504Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.578Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.578Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.654Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.654Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.729Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.729Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.806Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.806Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.863Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.863Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:22.948Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:22.948Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.030Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.030Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.101Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.101Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.156Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.156Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.237Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.237Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.317Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.317Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.393Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.393Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.449Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.449Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.528Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.528Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.605Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.605Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.682Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.682Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.733Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.733Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.809Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.809Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.886Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.886Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:23.957Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:23.957Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:24.035Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:24.035Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:24.113Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })
lasr   | 2024-04-01T06:27:24.113Z WARN  [lasr_actors::da_client] Received a RetrieveAccount message
lasr   | 2024-04-01T06:27:24.151Z WARN  [lasr_actors::pending_transactions] Attempting to clean pending graph
lasr   | 2024-04-01T06:27:24.188Z ERROR [lasr_actors::da_client] Error attempting to retreive account: da_client.rs: Line 87: Err(Custom { kind: Other, error: "ERROR:\n  Code: Internal\n  Message: failed to get blob metadata, please retry\n" })

I'm unsure if they're linked. This spits out really quickly tho, almost like a recursive function is being called and it's just grasping for something it can't find.

Opening this to track it.

feat: LASR Rewards/Fee distribution Contract

Describe the feature you'd like to request

Rewards and fees need to be distributable on chain. We need a contract to collect fees and disburse them alongside rewards.

Describe the solution you'd like to see

A contract to collect fees and distribute fee revenue and rewards.

  • Collect requirements
  • Determine Reward functions
  • Determine fee storage/retrieval
  • Implement LASR contract
  • Test Fee collection
  • Test reward distribution
  • Test fee distribution
  • Deploy contract

Additional information

No response

Orchestration of LASR base image(s) pull

This task depends on #115 . Once the testnet-services node has published an image as a tarball, this task is to create orcehstration to retrieve and extract the tarball to the LASR base_image directory on the LASR node(s).

Additional requirements:

  • We need to support different versions of the base image for differnet LASR nodes
  • We need to support different flavours of base image in the future in a way that's not yet been articulated

Occasionally, a program will deploy but then the 'create' command will fail despite success in the logs

Sometimes, I'll be forced to deploy a program twice in order for it's create method to save to state. Here are the logs from LASR:

lasr   | 2024-04-01T09:30:06.529Z WARN  [lasr_compute::compute] Calling: runsc --rootless --network=none run -bundle ./containers/bafyreia2b62nk5kullr43g53eaq3gurbcdif3hmnih46ysa4nqelhqynk4 bafyreia2b62nk5kullr43g53eaq3gurbcdif3hmnih46ysa4nqelhqynk4
lasr   | 2024-04-01T09:30:06.529Z WARN  [lasr_actors::executor] returning handle to executor
lasr   | 2024-04-01T09:30:06.529Z WARN  [lasr_actors::executor] result successful, placing handle in handles
lasr   | 2024-04-01T09:30:06.856Z WARN  [lasr_compute::compute] result from container: bafyreia2b62nk5kullr43g53eaq3gurbcdif3hmnih46ysa4nqelhqynk4 = "{\"computeInputs\":{\"version\":1,\"accountInfo\":{\"accountType\":{\"program\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\"},\"programNamespace\":null,\"ownerAddress\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"programs\":{},\"nonce\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"programAccountData\":{},\"programAccountMetadata\":{\"content_id\":\"bafyreia2b62nk5kullr43g53eaq3gurbcdif3hmnih46ysa4nqelhqynk4\"},\"programAccountLinkedPrograms\":[]},\"transaction\":{\"transactionType\":{\"call\":\"0x0000000000000000000000000000000000000000000000000000000000000019\"},\"from\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"to\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\",\"programId\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\",\"op\":\"create\",\"transactionInputs\":\"{\\\"name\\\":\\\"Vincent Van Dough\\\",\\\"symbol\\\":\\\"VINCE\\\",\\\"initializedSupply\\\":\\\"10\\\",\\\"totalSupply\\\":\\\"10\\\",\\\"to\\\":\\\"0xc2757a1fca93fce02daf05488c5729363cb41a15\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"price\\\":\\\"1\\\",\\\"paymentProgramAddress\\\":\\\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\\\",\\\"imgUrls\\\":[\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\",\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\",\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\",\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\",\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\",\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\",\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\",\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\",\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"]}\",\"value\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"nonce\":\"0x000000000000000000000000000000000000000000000000000000000000001a\",\"v\":1,\"r\":\"0x04571e2d9faacef55e90c9de2025a43b99045d72b4b491db20927f496d09662f\",\"s\":\"0x2acecec305aef761f0f4fb1c8a140a3b97909db21a1fc832b16de72b21a87dd8\"},\"op\":\"create\",\"contractInputs\":\"{\\\"name\\\":\\\"Vincent Van Dough\\\",\\\"symbol\\\":\\\"VINCE\\\",\\\"initializedSupply\\\":\\\"10\\\",\\\"totalSupply\\\":\\\"10\\\",\\\"to\\\":\\\"0xc2757a1fca93fce02daf05488c5729363cb41a15\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"price\\\":\\\"1\\\",\\\"paymentProgramAddress\\\":\\\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\\\",\\\"imgUrls\\\":[\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\",\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\",\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\",\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\",\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\",\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\",\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\",\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\",\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"]}\"},\"instructions\":[{\"create\":{\"programNamespace\":\"this\",\"programId\":\"this\",\"programOwner\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"totalSupply\":\"0x000000000000000000000000000000000000000000000000000000000000000a\",\"initializedSupply\":\"0x000000000000000000000000000000000000000000000000000000000000000a\",\"distribution\":[{\"programId\":\"this\",\"to\":{\"address\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\"},\"amount\":null,\"tokenIds\":[\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\",\"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",\"0x00000000000000000000000000000000000000000000000029a2241af62c0000\",\"0x0000000000000000000000000000000000000000000000003782dace9d900000\",\"0x0000000000000000000000000000000000000000000000004563918244f40000\",\"0x00000000000000000000000000000000000000000000000053444835ec580000\",\"0x0000000000000000000000000000000000000000000000006124fee993bc0000\",\"0x0000000000000000000000000000000000000000000000006f05b59d3b200000\",\"0x0000000000000000000000000000000000000000000000007ce66c50e2840000\",\"0x0000000000000000000000000000000000000000000000008ac7230489e80000\"],\"updateFields\":[{\"field\":\"data\",\"value\":{\"data\":{\"extend\":{\"type\":\"non-fungible\",\"imgUrl\":\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\",\"paymentProgramAddress\":\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\",\"price\":\"1\",\"methods\":\"approve,create,burn,mint,update\",\"tokenMap\":\"{\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\"},\\\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\"},\\\"0x00000000000000000000000000000000000000000000000029a2241af62c0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\"},\\\"0x0000000000000000000000000000000000000000000000003782dace9d900000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\"},\\\"0x0000000000000000000000000000000000000000000000004563918244f40000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\"},\\\"0x00000000000000000000000000000000000000000000000053444835ec580000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006124fee993bc0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006f05b59d3b200000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000007ce66c50e2840000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"}}\"}}}},{\"field\":\"metadata\",\"value\":{\"metadata\":{\"extend\":{\"symbol\":\"VINCE\",\"name\":\"Vincent Van Dough\",\"totalSupply\":\"10\",\"initializedSupply\":\"10\"}}}}]}]}},{\"update\":{\"updates\":[{\"programUpdate\":{\"account\":\"this\",\"updates\":[{\"field\":\"metadata\",\"value\":{\"metadata\":{\"extend\":{\"symbol\":\"VINCE\",\"name\":\"Vincent Van Dough\",\"totalSupply\":\"10\",\"initializedSupply\":\"10\"}}}},{\"field\":\"data\",\"value\":{\"data\":{\"extend\":{\"type\":\"non-fungible\",\"imgUrl\":\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\",\"paymentProgramAddress\":\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\",\"price\":\"1\",\"methods\":\"approve,create,burn,mint,update\",\"tokenMap\":\"{\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\"},\\\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\"},\\\"0x00000000000000000000000000000000000000000000000029a2241af62c0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\"},\\\"0x0000000000000000000000000000000000000000000000003782dace9d900000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\"},\\\"0x0000000000000000000000000000000000000000000000004563918244f40000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\"},\\\"0x00000000000000000000000000000000000000000000000053444835ec580000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006124fee993bc0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006f05b59d3b200000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000007ce66c50e2840000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"}}\"}}}}]}}]}}]}"
lasr   | 2024-04-01T09:30:06.856Z WARN  [lasr_compute::compute] results received, informing executor
lasr   | 2024-04-01T09:30:06.856Z WARN  [lasr_compute::compute] casted message to inform executor
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::executor] content_id: "bafyreia2b62nk5kullr43g53eaq3gurbcdif3hmnih46ysa4nqelhqynk4", transaction_id: Some("0x6b78ea59c63fe9cdc549f7ca4c0e1a63d3d96a37f9188f13d2e2aca26adbd3be")
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::executor] discovered handle
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::executor] Outputs: "{\"computeInputs\":{\"version\":1,\"accountInfo\":{\"accountType\":{\"program\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\"},\"programNamespace\":null,\"ownerAddress\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"programs\":{},\"nonce\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"programAccountData\":{},\"programAccountMetadata\":{\"content_id\":\"bafyreia2b62nk5kullr43g53eaq3gurbcdif3hmnih46ysa4nqelhqynk4\"},\"programAccountLinkedPrograms\":[]},\"transaction\":{\"transactionType\":{\"call\":\"0x0000000000000000000000000000000000000000000000000000000000000019\"},\"from\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"to\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\",\"programId\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\",\"op\":\"create\",\"transactionInputs\":\"{\\\"name\\\":\\\"Vincent Van Dough\\\",\\\"symbol\\\":\\\"VINCE\\\",\\\"initializedSupply\\\":\\\"10\\\",\\\"totalSupply\\\":\\\"10\\\",\\\"to\\\":\\\"0xc2757a1fca93fce02daf05488c5729363cb41a15\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"price\\\":\\\"1\\\",\\\"paymentProgramAddress\\\":\\\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\\\",\\\"imgUrls\\\":[\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\",\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\",\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\",\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\",\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\",\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\",\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\",\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\",\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"]}\",\"value\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"nonce\":\"0x000000000000000000000000000000000000000000000000000000000000001a\",\"v\":1,\"r\":\"0x04571e2d9faacef55e90c9de2025a43b99045d72b4b491db20927f496d09662f\",\"s\":\"0x2acecec305aef761f0f4fb1c8a140a3b97909db21a1fc832b16de72b21a87dd8\"},\"op\":\"create\",\"contractInputs\":\"{\\\"name\\\":\\\"Vincent Van Dough\\\",\\\"symbol\\\":\\\"VINCE\\\",\\\"initializedSupply\\\":\\\"10\\\",\\\"totalSupply\\\":\\\"10\\\",\\\"to\\\":\\\"0xc2757a1fca93fce02daf05488c5729363cb41a15\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"price\\\":\\\"1\\\",\\\"paymentProgramAddress\\\":\\\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\\\",\\\"imgUrls\\\":[\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\",\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\",\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\",\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\",\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\",\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\",\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\",\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\",\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\",\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"]}\"},\"instructions\":[{\"create\":{\"programNamespace\":\"this\",\"programId\":\"this\",\"programOwner\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"totalSupply\":\"0x000000000000000000000000000000000000000000000000000000000000000a\",\"initializedSupply\":\"0x000000000000000000000000000000000000000000000000000000000000000a\",\"distribution\":[{\"programId\":\"this\",\"to\":{\"address\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\"},\"amount\":null,\"tokenIds\":[\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\",\"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",\"0x00000000000000000000000000000000000000000000000029a2241af62c0000\",\"0x0000000000000000000000000000000000000000000000003782dace9d900000\",\"0x0000000000000000000000000000000000000000000000004563918244f40000\",\"0x00000000000000000000000000000000000000000000000053444835ec580000\",\"0x0000000000000000000000000000000000000000000000006124fee993bc0000\",\"0x0000000000000000000000000000000000000000000000006f05b59d3b200000\",\"0x0000000000000000000000000000000000000000000000007ce66c50e2840000\",\"0x0000000000000000000000000000000000000000000000008ac7230489e80000\"],\"updateFields\":[{\"field\":\"data\",\"value\":{\"data\":{\"extend\":{\"type\":\"non-fungible\",\"imgUrl\":\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\",\"paymentProgramAddress\":\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\",\"price\":\"1\",\"methods\":\"approve,create,burn,mint,update\",\"tokenMap\":\"{\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\"},\\\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\"},\\\"0x00000000000000000000000000000000000000000000000029a2241af62c0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\"},\\\"0x0000000000000000000000000000000000000000000000003782dace9d900000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\"},\\\"0x0000000000000000000000000000000000000000000000004563918244f40000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\"},\\\"0x00000000000000000000000000000000000000000000000053444835ec580000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006124fee993bc0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006f05b59d3b200000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000007ce66c50e2840000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"}}\"}}}},{\"field\":\"metadata\",\"value\":{\"metadata\":{\"extend\":{\"symbol\":\"VINCE\",\"name\":\"Vincent Van Dough\",\"totalSupply\":\"10\",\"initializedSupply\":\"10\"}}}}]}]}},{\"update\":{\"updates\":[{\"programUpdate\":{\"account\":\"this\",\"updates\":[{\"field\":\"metadata\",\"value\":{\"metadata\":{\"extend\":{\"symbol\":\"VINCE\",\"name\":\"Vincent Van Dough\",\"totalSupply\":\"10\",\"initializedSupply\":\"10\"}}}},{\"field\":\"data\",\"value\":{\"data\":{\"extend\":{\"type\":\"non-fungible\",\"imgUrl\":\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\",\"paymentProgramAddress\":\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\",\"price\":\"1\",\"methods\":\"approve,create,burn,mint,update\",\"tokenMap\":\"{\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\"},\\\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\"},\\\"0x00000000000000000000000000000000000000000000000029a2241af62c0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\"},\\\"0x0000000000000000000000000000000000000000000000003782dace9d900000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\"},\\\"0x0000000000000000000000000000000000000000000000004563918244f40000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\"},\\\"0x00000000000000000000000000000000000000000000000053444835ec580000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006124fee993bc0000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\"},\\\"0x0000000000000000000000000000000000000000000000006f05b59d3b200000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/dbe9ef55b8a6d86ae12ac87c43f5683f.jpg\\\"},\\\"0x0000000000000000000000000000000000000000000000007ce66c50e2840000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/2d8a4c4917693f2dd6c823b9517e38c1.png\\\"}}\"}}}}]}}]}}]}"
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::executor] call was sucessful, forwarding to pending transaction
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::executor] call was successful, forwarding to engine
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::executor] informed both pending transactions and engine actors of successful call
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::pending_transactions] received notice that transaction 0x6b78ea59c63fe9cdc549f7ca4c0e1a63d3d96a37f9188f13d2e2aca26adbd3be successfully executed
lasr   | 2024-04-01T09:30:06.857Z WARN  [lasr_actors::engine] transaction: 0x6b78ea59c63fe9cdc549f7ca4c0e1a63d3d96a37f9188f13d2e2aca26adbd3be received by engine as success

and then here's what i get back from get_account.

{
    "jsonrpc": "2.0",
    "result": "{\"accountType\":{\"program\":\"0xc2757a1fca93fce02daf05488c5729363cb41a15\"},\"programNamespace\":null,\"ownerAddress\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"programs\":{},\"nonce\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"programAccountData\":{},\"programAccountMetadata\":{\"content_id\":\"bafyreia2b62nk5kullr43g53eaq3gurbcdif3hmnih46ysa4nqelhqynk4\"},\"programAccountLinkedPrograms\":[]}",
    "id": 1
}

End to End SerDe for Transaction Data

In order to satify #119 and child tasks, we need to pass our data blobs into the archive crate as a structures that can be serialised and deserialised by serde. The archive crate will serialise this into a BSON document for MongoDB (or something else in future), and write the data, and will do the same in reverse on reads.

This task is to take the transaction data structures that we need to archive, and to ensure that we can call serde over these and with no issues. Once we identify the relevant data structure(s), we can add Serialize, Deserialize to each module and structure, and probably write a quick unit test to show that we go from struct->JSON/BSON/whatever->struct through serde and be done with it.

This is related to #121 , but is for transaction data vs account data.

Orchestration of LASR container repo

In order to get LASR working in the managed environment, it's apparently necessary to pull and extract the node:lts-slim container image from the Docker Hub image repo. We don't want to deploy Docker as a dependency on all of the nodes, plus we want to have a barrier between pulled images and deployed images to allow for future evaluation and auditing, as well as general consistency.

This task's work items are to create an orchestration role to:

  • Deploy Docker to testnet-services node
  • Pull the requested images (node:lts-slim initially) from Docker Hub
  • Extract the image as a tarball
  • Publish the tarball over HTTP(S) for LASR nodes to pull from

End to End SerDe for Account Data

In order to satify #119 and child tasks, we need to pass our data blobs into the archive crate as a structures that can be serialised and deserialised by serde. The archive crate will serialise this into a BSON document for MongoDB (or something else in future), and write the data, and will do the same in reverse on reads.

This task is to take the account data structures that we need to archive, and to ensure that we can call serde over these and with no issues. Once we identify the relevant data structure(s), we can add Serialize, Deserialize to each module and structure, and probably write a quick unit test to show that we go from struct->JSON/BSON/whatever->struct through serde and be done with it.

This is related to #122 , but is for account data vs transaction data.

Improve error types and messages

Many error messages reference the line number they occurred on, but the line number has since moved. These error messages could be improved, and overall the error types in the workspace could be more synergistic. An example of an error type that needs to change would be the AccountError type.

In general, robust error types make converting between other error types seamless and easy. An example of an error type that attempts to properly handle incoming errors is the BatcherError type.

Failure printing to stdout

Just got this trying to mint 5 NFTs:

lasr   | 2024-04-01T11:34:09.658Z WARN  [lasr_compute::compute] results received, informing executor
lasr   | 2024-04-01T11:34:09.658Z WARN  [lasr_compute::compute] casted message to inform executor
lasr   | 2024-04-01T11:34:09.658Z WARN  [lasr_actors::executor] content_id: "bafyreidowqyfmayej2rcmc7x7jag4c3krkwltsb4e55avwjnqu2pvczqeq", transaction_id: Some("0x56213cdf78b48f5ed5942e0e1f5f55af27967a0812de0e89cbad658c556f4e4a")
lasr   | 2024-04-01T11:34:09.658Z WARN  [lasr_actors::executor] discovered handle
lasr   | 2024-04-01T11:34:09.658Z WARN  [lasr_actors::executor] Outputs: "{\"computeInputs\":{\"version\":1,\"accountInfo\":{\"accountType\":{\"program\":\"0x5678e1902208c6d47ff384e00ddcf1807c5d9e1d\"},\"programNamespace\":null,\"ownerAddress\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"programs\":{\"0x5678e1902208c6d47ff384e00ddcf1807c5d9e1d\":{\"programId\":\"0x5678e1902208c6d47ff384e00ddcf1807c5d9e1d\",\"ownerId\":\"0x5678e1902208c6d47ff384e00ddcf1807c5d9e1d\",\"balance\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"metadata\":{\"content_id\":\"bafyreidowqyfmayej2rcmc7x7jag4c3krkwltsb4e55avwjnqu2pvczqeq\",\"initializedSupply\":\"8\",\"name\":\"Vincent Van Dough\",\"symbol\":\"DOUGH\",\"totalSupply\":\"8\"},\"tokenIds\":[\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\",\"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",\"0x00000000000000000000000000000000000000000000000029a2241af62c0000\",\"0x0000000000000000000000000000000000000000000000003782dace9d900000\",\"0x0000000000000000000000000000000000000000000000004563918244f40000\",\"0x00000000000000000000000000000000000000000000000053444835ec580000\",\"0x0000000000000000000000000000000000000000000000006124fee993bc0000\"],\"allowance\":{},\"approvals\":{},\"data\":{\"imgUrl\":\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\",\"methods\":\"approve,create,burn,mint,update\",\"paymentProgramAddress\":\"0x1c9d2f65266a1e44378c2f4453d3c6b1b495d681\",\"price\":\"1\",\"tokenMap\":\"{\\\"0\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\"},\\\"1\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\"},\\\"2\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\"},\\\"3\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\"},\\\"4\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\"},\\\"5\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\"},\\\"6\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\"},\\\"7\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/469b3e5d68a998340037173c9ea6317c.png\\\"}}\",\"type\":\"non-fungible\"},\"status\":\"free\"}},\"nonce\":\"0x0000000000000000000000000000000000000000000000000000000000000001\",\"programAccountData\":{\"imgUrl\":\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\",\"methods\":\"approve,create,burn,mint,update\",\"paymentProgramAddress\":\"0x1c9d2f65266a1e44378c2f4453d3c6b1b495d681\",\"price\":\"1\",\"tokenMap\":\"{\\\"0\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/98b9369c57a331ecfbfb1f84d4a5f602.gif\\\"},\\\"1\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/df45016b8db41bb15a37e3b9c3f5ea60.jpg\\\"},\\\"2\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/8a5d2512b00c0d59ce616bb9d0e14586.jpg\\\"},\\\"3\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/9049760c916b17b3739c4db24cecd65e.png\\\"},\\\"4\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/eca7f854c4b2ba1c726b7b9b74c241db.png\\\"},\\\"5\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/4d55275fab5938174265a92e5c3e8bdc.png\\\"},\\\"6\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/3d37e73eaf8bee2433950d5abe9ad7c5.png\\\"},\\\"7\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"imgUrl\\\":\\\"https://raw.seadn.io/files/469b3e5d6thread 'async-std/runtime' panicked at library/std/src/io/stdio.rs:1021:9:
lasr   | failed printing to stdout: Resource temporarily unavailable (os error 11)
lasr   | note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

possibly related to this

Large data payloads in program deployment are being cut off

It looks as tho for a program that has a large data payload that lasr is cutting off a chunk of the registration transaction:

lasr   | 2024-04-01T09:14:14.665Z WARN  [lasr_actors::pending_transactions] added call transaction: 0x5d61712719e02899e92f0d9cc2e9a4f6b6c60e7fd993040fa424e2adbdc07125 to pre-call dependency graph
lasr   | 2024-04-01T09:14:14.665Z WARN  [lasr_compute::compute] Calling: runsc --rootless --network=none run -bundle ./containers/bafyreieu4cvk6fgi7nm3hi7sz57rqocp3tk7zdk53pune6bin42wwzfgei bafyreieu4cvk6fgi7nm3hi7sz57rqocp3tk7zdk53pune6bin42wwzfgei
lasr   | 2024-04-01T09:14:14.665Z WARN  [lasr_actors::executor] returning handle to executor
lasr   | 2024-04-01T09:14:14.665Z WARN  [lasr_actors::executor] result successful, placing handle in handles
lasr   | 2024-04-01T09:14:15.047Z WARN  [lasr_compute::compute] result from container: bafyreieu4cvk6fgi7nm3hi7sz57rqocp3tk7zdk53pune6bin42wwzfgei = "{\"computeInputs\":{\"version\":1,\"accountInfo\":{\"accountType\":{\"program\":\"0xc92ea48a2c05a806e73d881e8800613c14e690c7\"},\"programNamespace\":null,\"ownerAddress\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"programs\":{},\"nonce\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"programAccountData\":{},\"programAccountMetadata\":{\"content_id\":\"bafyreieu4cvk6fgi7nm3hi7sz57rqocp3tk7zdk53pune6bin42wwzfgei\"},\"programAccountLinkedPrograms\":[]},\"transaction\":{\"transactionType\":{\"call\":\"0x0000000000000000000000000000000000000000000000000000000000000014\"},\"from\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"to\":\"0xc92ea48a2c05a806e73d881e8800613c14e690c7\",\"programId\":\"0xc92ea48a2c05a806e73d881e8800613c14e690c7\",\"op\":\"create\",\"transactionInputs\":\"{\\\"name\\\":\\\"Snakie snek\\\",\\\"symbol\\\":\\\"SNEK\\\",\\\"initializedSupply\\\":\\\"1\\\",\\\"totalSupply\\\":\\\"1\\\",\\\"to\\\":\\\"0xc92ea48a2c05a806e73d881e8800613c14e690c7\\\",\\\"imgUrl\\\":\\\"https://pbs.twimg.com/media/GJw6IvrXwAAYFqb?format=jpg&name=medium\\\",\\\"price\\\":\\\"1\\\",\\\"paymentProgramAddress\\\":\\\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\\\"}\",\"value\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"nonce\":\"0x0000000000000000000000000000000000000000000000000000000000000015\",\"v\":1,\"r\":\"0x36b2bb161aff1720fe3d048969181a6cbdd0e0a726db60d5e56cc18f8674fea6\",\"s\":\"0x48737f4e12197649f2e60468c3add2a4fb5951500bb04beed644bccf76769b56\"},\"op\":\"create\",\"contractInputs\":\"{\\\"name\\\":\\\"Snakie snek\\\",\\\"symbol\\\":\\\"SNEK\\\",\\\"initializedSupply\\\":\\\"1\\\",\\\"totalSupply\\\":\\\"1\\\",\\\"to\\\":\\\"0xc92ea48a2c05a806e73d881e8800613c14e690c7\\\",\\\"imgUrl\\\":\\\"https://pbs.twimg.com/media/GJw6IvrXwAAYFqb?format=jpg&name=medium\\\",\\\"price\\\":\\\"1\\\",\\\"paymentProgramAddress\\\":\\\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\\\"}\"},\"instructions\":[{\"create\":{\"programNamespace\":\"this\",\"programId\":\"this\",\"programOwner\":\"0x1234d4b33fa19bf655519f10e8fded9e31259b28\",\"totalSupply\":\"0x0000000000000000000000000000000000000000000000000000000000000001\",\"initializedSupply\":\"0x0000000000000000000000000000000000000000000000000000000000000001\",\"distribution\":[{\"programId\":\"this\",\"to\":{\"address\":\"0xc92ea48a2c05a806e73d881e8800613c14e690c7\"},\"amount\":null,\"tokenIds\":[\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\"],\"updateFields\":[{\"field\":\"data\",\"value\":{\"data\":{\"extend\":{\"type\":\"non-fungible\",\"imgUrl\":\"https://pbs.twimg.com/media/GJw6IvrXwAAYFqb?format=jpg&name=medium\",\"paymentProgramAddress\":\"0xc8e3d7cd8a9ec4a4f0738c045af56a10f7a5a973\",\"price\":\"1\",\"methods\":\"approve,create,burn,mint,update\",\"tokenMap\":\"{\\\"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000\\\":{\\\"ownerAddress\\\":\\\"this\\\",\\\"data\\\":\\\"{\\\\\\\"imgUrl\\\\\\\":\\\\\\\"https://pbs.twimg.com/media/GJw6IvrXwAAYFqb?format=jpg&name=medium\\\\\\\"}\\\"}}\",\"snek\":\"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9ImllPWVkZ2UiPgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnRhaWx3aW5kY3NzLmNvbSI+PC9zY3JpcHQ+CiAgICA8dGl0bGU+U25ha2U8L3RpdGxlPgogICAgPHN0eWxlPgogICAgICAgIGJvZHkgewogICAgICAgICAgICBoZWlnaHQ6IDUwdmg7CiAgICAgICAgICAgIHdpZHRoOiAxMDB2dzsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgICAgICAgfQoKICAgICAgICAjZ2FtZS1ib2FyZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQ0M7CiAgICAgICAgICAgIHdpZHRoOiA1MHZtaW47CiAgICAgICAgICAgIGhlaWdodDogNTB2bWluOwogICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgyMSwgMWZyKTsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMjEsIDFmcik7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuc25ha2UgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyNzc3OwogICAgICAgICAgICBib3JkZXI6IC4yNXZtaW4gc29saWQgYmxhY2s7CiAgICAgICAgfQoKICAgICAgICAuZm9vZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCg1MCwgMTAwJSwgNTAlKTsKICAgICAgICAgICAgYm9yZGVyOiAuMjV2bWluIHNvbGlkIGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsgLyogSGlkZGVuIGJ5IGRlZmF1bHQgKi8KICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOyAvKiBTdGF5IGluIHBsYWNlICovCiAgICAgICAgICAgIHotaW5kZXg6IDE7IC8qIFNpdCBvbiB0b3AgKi8KICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICB3aWR0aDogMTAwJTsgLyogRnVsbCB3aWR0aCAqLwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7IC8qIEZ1bGwgaGVpZ2h0ICovCiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvOyAvKiBFbmFibGUgc2Nyb2xsIGlmIG5lZWRlZCAqLwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwwLDApOyAvKiBGYWxsYmFjayBjb2xvciAqLwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuNCk7IC8qIEJsYWNrIHcvIG9wYWNpdHkgKi8KICAgICAgICB9CgogICAgICAgIC5tb2RhbC1jb250ZW50IHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTsKICAgICAgICAgICAgbWFyZ2luOiAxNSUgYXV0bzsgLyogMTUlIGZyb20gdGhlIHRvcCBhbmQgY2VudGVyZWQgKi8KICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgYm9yZGVyOiA0cHggc29saWQgIzg4ODsKICAgICAgICAgICAgd2lkdGg6IDgwJTsgLyogQ291bGQgYmUgbW9yZSBvciBsZXNzLCBkZXBlbmRpbmcgb24gc2NyZWVuIHNpemUgKi8KICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyNnB4OwogICAgICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIH0KCiAgICAgICAgYnV0dG9uIHsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2NyaXB0PgogICAgICAgIGNvbnNvbGUubG9nKCJURVNUSU5HIikKICAgIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGlkPSJ3YWxsZXQtY29ubmVjdC1tb2RhbCIgY2xhc3M9Im1vZGFsIHRleHQtYmxhY2siPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vcGJzLnR3aW1nLmNvbS9tZWRpYS9HSnc2SXZyWHdBQVlGcWI/Zm9ybWF0PWpwZyZuYW1lPW1lZGl1bSIgY2xhc3M9InJvdW5kZWQtbWQgdy02NCBoLTY0IG0tYXV0byI+CiAgICAgICAgPHAgaWQ9Im1vZGFsLXRleHQiIGNsYXNzPSIiPkxBU1IgU25lazwvcD4KICAgICAgICA8cCBpZD0ibW9kYWwtYWRkcmVzcyIgY2xhc3M9InRleHQtc20gbWItNiI+PC9wPgogICAgICAgIDxidXR0b24gaWQ9Im1vZGFsLWJ1dHRvbiIgY2xhc3M9ImJnLXBpbmstNjAwIGJvcmRlci1ibGFjayBwLTYgcm91bmRlZC1tZCB0ZXh0LXdoaXRlIGhvdmVyOm9wYWNpdHktNTAiPkNvbm5lY3QgV2FsbGV0PC9idXR0b24+CiAgICA8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImdhbWUtYm9hcmQiPjwvZGl2Pgo8c2NyaXB0PgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgbGFzdFJlbmRlclRpbWUgPSAwCiAgICAgICAgICAgIGxldCBnYW1lT3ZlciA9IGZhbHNlCiAgICAgICAgICAgIGNvbnN0IGdhbWVCb2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnYW1lLWJvYXJkJykKICAgICAgICAgICAgbGV0IGNvbm5lY3RlZCA9IGZhbHNlCiAgICAgICAgICAgIGxldCBjb25uZWN0ZWRBY2NvdW50ID0gbnVsbAogICAgICAgICAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3YWxsZXQtY29ubmVjdC1tb2RhbCcpOwogICAgICAgICAgICBjb25zdCBtb2RhbEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1idXR0b24nKTsKICAgICAgICAgICAgY29uc3QgbW9kYWxUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLXRleHQnKTsKICAgICAgICAgICAgY29uc3QgbW9kYWxBZGRyZXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLWFkZHJlc3MnKTsKICAgICAgICAgICAgbGV0IGdhbWVTdGFydGVkID0gZmFsc2U7CiAgICAgICAgICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICBtb2RhbEJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIWdhbWVTdGFydGVkKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93Py5sYXNyPy5yZXF1ZXN0QWNjb3VudCgpLnRoZW4oKGFjY291bnQpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYWNjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZEFjY291bnQgPSBhY2NvdW50CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IHRydWU7IC8vIFRoaXMgc2hvdWxkIGJlIGRlY2xhcmVkIGF0IGEgaGlnaGVyIHNjb3BlIGlmIG5lZWRlZCBlbHNld2hlcmUKICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxUZXh0LnRleHRDb250ZW50ID0gYENvbm5lY3RlZCB0bzpgOwogICAgICAgICAgICAgICAgICAgICAgICBtb2RhbEFkZHJlc3MudGV4dENvbnRlbnQgPSBgJHthY2NvdW50LmFkZHJlc3N9YDsKICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxCdXR0b24udGV4dENvbnRlbnQgPSAnU3RhcnQgR2FtZSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGdhbWVTdGFydGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ29ubmVjdGlvbiBmYWlsZWQ6JywgZXJyb3IpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAvLyBIaWRlIG1vZGFsIGFuZCBzdGFydCB0aGUgZ2FtZQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobWFpbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBtYWluKGN1cnJlbnRUaW1lKSB7CiAgICAgICAgICAgICAgICB0cnkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoZ2FtZU92ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oJ1lvdSBsb3N0LiBQcmVzcyBvayB0byByZXN0YXJ0LicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAnL2FwcHMvc25laycKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShtYWluKQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZHNTaW5jZUxhc3RSZW5kZXIgPSAoY3VycmVudFRpbWUgLSBsYXN0UmVuZGVyVGltZSkgLyAxMDAwCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZHNTaW5jZUxhc3RSZW5kZXIgPCAxIC8gU05BS0VfU1BFRUQpIHJldHVybgogICAgICAgICAgICAgICAgICAgIGxhc3RSZW5kZXJUaW1lID0gY3VycmVudFRpbWUKICAgICAgICAgICAgICAgICAgICB1cGRhdGUoKQogICAgICAgIC2024-04-01T09:14:26.272Z WARN  [lasr_actors::pending_transactions] Attempting to clean pending graph
lasr   | 2024-04-01T09:14:41.273Z WARN  [lasr_actors::pending_transactions] Attempting to clean pending graph
lasr   | 2024-04-01T09:14:56.274Z WARN  [lasr_actors::pending_transactions] Attempting to clean pending graph
lasr   | 2024-04-01T09:15:11.275Z WARN  [lasr_actors::pending_transactions] Attempting to clean pending graph

Deploying programs fails with timeout

Currently, deploying a program to LASR doesn't work every time. I trigger a deploy in lasrctl which publishes it:

12:19:58 ~/code/versatus/versatus-javascript imports $ lasrctl deploy --build example-program -a hath -n 50cent -s 50CENT -p "50 Cent's Fungible" --initializedSupply 5000 -t 5000 -i '{"imgUrl":"https://pbs.twimg.com/media/GJ34gs4XUAAjfF1?format=jpg&name=medium","conversionRate":"1","paymentProgramAddress":"0x210dca9e7121ff926606f9715777a055fe3f1d92"}'
Using existing keypair...
Getting secret key from keypair file
Getting address from keypair file
Creating temporary test file against cli arguments...
Running test...
Validating the PROGRAM OUTPUT...
*******************************
Output is valid โœ… 
*******************************
Tested input: temp-create-input-1711954219660.json

Create method testing complete...
Publishing program...
USING RPC URL:  http://lasr-sharks.versatus.io:9292
USING IPFS URL:  167.99.20.121:5001
Program published.
==> cid: bafyreicgizlusq2lkipdb3l3rgxcygglptawfxe7fif2en24xjid2d4p3e

but then during the registration, it times out and fails:

Registering program...
USING RPC URL:  http://lasr-sharks.versatus.io:9292
USING IPFS URL:  167.99.20.121:5001
Error: Failed to register program: error: Command failed: ./build/lasr_cli wallet register-program --from-secret-key --secret-key "d09844176d234e73a116b6f6adcfa43e8ab5929ad994c84bc1c6d0fa33a470af" --cid "bafyreicgizlusq2lkipdb3l3rgxcygglptawfxe7fif2en24xjid2d4p3e"
Error: Custom { kind: Other, error: "Request timeout" }

   at registerProgram (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/cli-helpers.js:102:15)
   at async Object.deploy [as handler] (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/commands/deploy.js:158:36)
Registration failed. Retrying...
USING RPC URL:  http://lasr-sharks.versatus.io:9292
USING IPFS URL:  167.99.20.121:5001
Error: Failed to register program: error: Command failed: ./build/lasr_cli wallet register-program --from-secret-key --secret-key "d09844176d234e73a116b6f6adcfa43e8ab5929ad994c84bc1c6d0fa33a470af" --cid "bafyreicgizlusq2lkipdb3l3rgxcygglptawfxe7fif2en24xjid2d4p3e"
Error: Custom { kind: Other, error: "Request timeout" }

   at registerProgram (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/cli-helpers.js:102:15)
   at async Object.deploy [as handler] (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/commands/deploy.js:158:36)
Registration failed. Retrying...
USING RPC URL:  http://lasr-sharks.versatus.io:9292
USING IPFS URL:  167.99.20.121:5001
Error: Failed to register program: error: Command failed: ./build/lasr_cli wallet register-program --from-secret-key --secret-key "d09844176d234e73a116b6f6adcfa43e8ab5929ad994c84bc1c6d0fa33a470af" --cid "bafyreicgizlusq2lkipdb3l3rgxcygglptawfxe7fif2en24xjid2d4p3e"
Error: Custom { kind: Other, error: "Request timeout" }

   at registerProgram (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/cli-helpers.js:102:15)
   at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
   at async Object.deploy [as handler] (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/commands/deploy.js:158:36)
Registration failed. Retrying...
USING RPC URL:  http://lasr-sharks.versatus.io:9292
USING IPFS URL:  167.99.20.121:5001
Error: Failed to register program: error: Command failed: ./build/lasr_cli wallet register-program --from-secret-key --secret-key "d09844176d234e73a116b6f6adcfa43e8ab5929ad994c84bc1c6d0fa33a470af" --cid "bafyreicgizlusq2lkipdb3l3rgxcygglptawfxe7fif2en24xjid2d4p3e"
Error: Custom { kind: Other, error: "Request timeout" }

   at registerProgram (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/cli-helpers.js:102:15)
   at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
   at async Object.deploy [as handler] (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/commands/deploy.js:158:36)
Registration failed. Retrying...
USING RPC URL:  http://lasr-sharks.versatus.io:9292
USING IPFS URL:  167.99.20.121:5001
Error: Failed to register program: error: Command failed: ./build/lasr_cli wallet register-program --from-secret-key --secret-key "d09844176d234e73a116b6f6adcfa43e8ab5929ad994c84bc1c6d0fa33a470af" --cid "bafyreicgizlusq2lkipdb3l3rgxcygglptawfxe7fif2en24xjid2d4p3e"
Error: Custom { kind: Other, error: "Request timeout" }

   at registerProgram (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/cli-helpers.js:102:15)
   at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
   at async Object.deploy [as handler] (file:///Users/andrewhathaway/code/versatus/versatus-javascript/dist/lasrctrl/commands/deploy.js:158:36)
Registration failed. Retrying...
Max registration attempts reached. Aborting.
Deployment error: Error: Failed to register the program.

Use newer cargo workspace resolver

$ cargo check                                                                               
warning: virtual workspace defaulting to `resolver = "1"` despite one or more workspace members being on edition 2021 which implies `resolver = "2"`
note: to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest
note: to use the edition 2021 resolver, specify `workspace.resolver = "2"` in the workspace root's manifest
note: for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions

Invalid number of quorums error

Seeing this error from time to time in stdout:

lasr   | 2024-04-01T06:34:39.620Z ERROR [lasr_actors::batcher] Custom("ERROR:\n  Code: InvalidArgument\n  Message: number of custom_quorum_numbers must not exceed number of quorums\n")

Use file path for program IO

Currently we write the program inputs and outputs to stdout which is causing collisions with log info

This task should be two PRs in this order of importance:

Ref #89
Ref #90

Encountered strange error / core dump

Just ran into a strange error while minting an NFT:

lasr   | 2024-04-03T14:59:24.001Z WARN  [lasr_types::account] token.balance() 10000000000000000000 >= 0 amount
lasr   | 2024-04-03T14:59:24.001Z WARN  [lasr_actors::validator] validating caller information: Some(Token { program_id: Address([245, 207, 135, 90, 65, 147, 199, 211, 120, 133, 68, 63, 165, 54, 59, 9, 159, 133, 143, 19]), owner_id: Address([18, 52, 212, 179, 63, 161, 155, 246, 85, 81, 159, 16, 232, 253, 237, 158, 49, 37, 155, 40]), balance: 0, metadata: Metadata({"content_id": "bafyreih7auene7n7xmr2natazptmjf3ccfh5uvcwx3wjjbgl3zefhhw6am", "initializedSupply": "50", "name": "Pokeball", "symbol": "POKEBALL", "totalSupply": "50"}), token_ids: [0, 1000000000000000000], allowance: {}, approvals: {}, data: ArbitraryData({"imgUrl": "https://pbs.twimg.com/media/GIvy36nXgAAr6F7?format=jpg&name=900x900", "methods": "approve,create,burn,mint,update", "paymentProgramAdRayon: detected unexpected panic; aborting
lasr   | /app/bin/start-lasr-kaleido.sh: line 14: 317871 Aborted                 (core dumped) SECRET_KEY=954d7e1053dffa010466cc962d45cd86eee3630d8c82ef67de1e7439ac157e92 BLOCKS_PROCESSED_PATH="/app/blocks_processed.dat" ETH_RPC_URL="https://u0v5lifwk3:xtSbq-E9AoiEBnIrjKml7p-4Wk7YOtXtnt3lVYc5GjU@u0v4deab9j-u0ghk9j0sc-rpc.us0-aws.kaleido.io/" EO_CONTRACT_ADDRESS=0xca3ed4ab07ef6b98d797a35a5aef301ec24a829f COMPUTE_RPC_URL=ws://localhost:9125 STORAGE_RPC_URL=ws://localhost:9126 BATCH_INTERVAL=180 /app/lasr/target/release/lasr_node
lasr   | Exited
ipfs   | Interrupting...
ipfs   |
ipfs   | Received interrupt signal, shutting down...
ipfs   | (Hit ctrl-c again to force-shutdown the daemon.)
ipfs   | Exited

feat: Token contract on LASR

Describe the feature you'd like to request

We need a corollary for the Versatus Ethereum contract that should be able to handle distribution as well as locking and vesting. This might need to support bridging as well.

Describe the solution you'd like to see

An easy to read/audit contract that offers parity with the ethereum implementation of the token contract.

Additional information

No response

Managed LASR Deployments Orchestration

This is a (very) high level issue to group together tasks involved in orchestration for a production-ready, managed deployment of LASR. Part of which exists already, some functionality is planned and some requirements are likely still unknown. As we scale past a single, shared and hand-curated node, it becomes more and more critical that we're able to manage all of the nodes and environments through orchestration to keep the deployments consistent and to reduce the overhead in managing them in the field.

A secondary use case also exists. As we look to onboard partners as node operators, having some reusable orchestration will allow them to quickly stand up nodes in their environment and join the network.

Here are the subtasks representing specific chunks of functionality:

Issues #125 and #126 are linked both to this issue, as well as #119 .

Orchestration of LASR private TLS CA

For some services between LASR nodes, we'll need support for TLS certificates. These should be signed by a CA, but don't need to signed by a public CA. The simplest approach here might be to reuse some of @mattgeddes ' existing code to deploy a Versatus CA, and to then have all the nodes trust it, and to generate a Versatus certificate for each node. That will allow any Versatus alphanet services to be able to use TLS to communicate with services on any other Versatus alphanet machine. This could apply to Prometheus, MongoDB, Nginx, Kubo, and any other services that are used within the LASR alphanet network.

Call Archive write path from da_client crate

Once we have the create path for the archive create, this task is to add calls to it from the da_client crate within LASR. Once this path exists, we can probably even run with these changes on one of the test networks. That'll not only give us data to help testing the read path, but also gives other applications a chance to start looking at the data and experimenting with it (a future block explorer, for example).

We should add more detail here once we know more about where we're going to hook into this in the LASR code.

Create Archive crate

The archive crate will likely be a standalone crate in its own repo to better allow for it to be used in other projects as needed. For projects in active development, they can point their Cargo.toml dependencies straight at the Github repo, and then once they're ready for a pull request, can tie it to a specific version that we'll also publish to crates.io.

The interface itself will be really basic to begin with:

  • A create interface to take a new document and insert it into the backend repository
  • An update interface to take a document and update the copy in the backend repository
  • A get interface to retrieve a document by some criteria or ID (potentially split into multiple functions)
  • Possibly a delete interface, although we don't necessarily want most consumers to be able to remove data

The interface won't do much to delve into the contents of objects/documents/blobs passed in itself, but will assume that we can use Rust's serde_derive to serialise and deserialise to a format that is conducive to the backend.

The above interfaces will specify which archive backend to use, and which instance. In the short term, the only backend will be MongoDB and the instance equates to the MongoDB database name (allowing for multiple instances to be hosted on the same infrastructure in cases where that makes sense).

The MongoDB backend will also use the document type (a simple enum with no real awareness of the data structures themselves) to determine which collection (table) the document should be written to. This allows the short term goal of supporting accounts and transaction data and for those to be archived in separate repositories. Other document types/repos can be added, and additional archive backends written in the future can likely do the same.

I have a start on the crate itself. There were some Rust hurdles to get around, including async traits not being native and not being complete. I need to fix up some serialisation stuff and should be able to push an initial implementation that allows archive writes. This will let us start plugging in the LASR code to at least start archiving data -- potentially on a test network. The advantage of having this path somewhat ready is that it gives other folks data they can start looking into for a potential block explorer.

feat: LASR RPC node into separate binary

Describe the feature you'd like to request

RPC node for LASR needs to be separate from the LASR node.

  • Explore decoding LASR Transactions from Eigen archival nodes
  • Investigate gaps in Ethereum RPC parity for needed features (indexer/explorer support)
  • Add Ethereum endpoints where necessary
  • Extract RPC Node binary from LASR node

Describe the solution you'd like to see

RPC Node with Ethereum parity should be deployable separate from the LASR node.

Additional information

No response

feat: Versatus token contract on Ethereum

Describe the feature you'd like to request

We need a token contract launched on ethereum if we are issuing the token ahead of mainnet launch. This contract will need to incorporate distribution logic as well as locking & vesting.

Describe the solution you'd like to see

An ethereum contract deployed to mainnet that is capable of issuing initial distributions and ensuring that tokens are locked and vesting schedules are followed. The vesting schedule needs to be modifiable for parties that discontinue their vesting.

Additional information

No response

Argument list too long error

Ran into this error, unsure if it was provoked from our use, but it was surrounded with DA CLIENT errors.

lasr   | 2024-04-10T15:32:04.993Z ERROR [lasr_node] Custom("Argument list too long (os error 7)")
lasr   | 2024-04-10T15:35:04.995Z ERROR [lasr_node] Custom("Argument list too long (os error 7)")

feat: Staking Contract

Describe the feature you'd like to request

A contract that allows staking on the LASR network.

Describe the solution you'd like to see

  • Investigation/Requirement gathering for LASR Staking contract
  • ...
  • Testing of LASR Staking Contract
  • Deployment

Additional information

No response

Organize workspace dependencies and `Cargo.toml` files to meet guidelines

Cargo.toml Workspace and Dependency Guidelines:

  • check for duplicated dependencies across the workspace, and add them as workspace dependencies instead https://github.com/est31/cargo-udeps is a great tool for ensuring we aren't adding duplicate dependencies. We should add a CI step to check for this as well.
  • omit patch dependency versions to allow cargo to resolve dependency versions across all dependencies automatically, eg 1.20.101 should be 1.20 otherwise we are restricting cargo and it more than likely will build multiple of the same dependency crate at different patch versions
  • move test dependencies to [dev-dependencies] to avoid building unnecessary packages, increasing build times
  • organize dependencies by alphabetical order to make things easier to find
  • use the workspace's package info for each crate's package info, this is declared in the workspace Cargo.toml same as [workspace.dependencies], the versatus/versatus repo is a good example of how to do this

feat: Scaling LASR Nodes above 1 (single sequencer)

Describe the feature you'd like to request

We should be able to deploy multiple LASR nodes that have consensus using a single sequencer.

Describe the solution you'd like to see

The LASR nodes should be able to communicate and reach consensus with a single leader

  • Investigate/estimate effort & create needed issues
  • LASR nodes share incoming transactions
  • LASR nodes validate transactions by agreeing on instructions produced
  • Sequencer collects validated transactions
  • Sequencer determines ordering of accounts based on account dependencies
  • Determine config changes needed for multiple nodes
  • Integrate consensus for multiple nodes
  • Test that multiple nodes handle the load within the expected time of the single node setup
  • Test failure states

Additional information

No response

BUG: Forced to deploy twice

When deploying a contract to LASR, the first call to the deploy does not succeed. However, if you call it again, it goes through.

It's hanging in the is_pinned method

The way we will fix it is to have deploys go directly to LASR, and reverse the mapping (Address -> contentId) when the content id comes back or alternatively just return tx Id and let them poll for their address when it goes through

Orchestration of IPFS instance on separate node

We've seen resource starvation by LASR that prevents Kubo/IPFS from being able to complete its work. It also doesn't make sense to have the Kubo resources consumed across all nodes -- a single Kubo instance local to the LASR nodes' data centre(s) ought to be enough.

This task is to modify the orchestration to allow the splitting off of IPFS from the LASR node(s).

Remove `patch` versions in `Cargo.toml`s

Locking to patch versions doesn't allow cargo to resolve dependencies of dependencies, thus resulting in multiple builds of the same crate dependency at different versions

LASR Account and Transaction Archive

Overview and Requirements

This is a high level issue to group subtasks for the project to create an archive of accounts and transactions for LASR. Currently, EigenDA is the source of truth for all LASR state. EigenDA, however removes data it considers idle, and may come with additional cost if we're using it to store unnecessary data. As a result, all LASR account and transaction data will be also be maintained by LASR in a permanent, online archive.

A secondary requirement that would be nice to have, is the ability to archive the data in such a way that makes it easier to support additional applications in the future, such as a block explorer application or other 3rd party applications wishing to deal with state.

The flow of data follows the flow of this mermaid diagram:

sequenceDiagram
    Ethereum Contract->>eo_server: Events
    create participant EigenDA
    eo_server->>EigenDA: Accounts and Transaction Batches
    create participant Archive
    eo_server->>Archive: Accounts and Transaction Batches
    EigenDA->>lasr_read: Accounts or Transaction Batches
    Archive->>lasr_read: Accounts or Transaction Batches
    lasr_read->>???: Read response
Loading

The Archive Interface and Backend

The archive crate is being designed as a modular interface, where it will be possible to add support for new archive backends in the future. The first archive backend to be implemented, however, will be a MongoDB backend.

Whilst the archive crate interface itself will do everything to avoid as much of the semantic detail of the data being archived, by serialising the data from its internal structs to BSON, and not enforcing a specific schema, MongoDB is free to generate indexes, references and other constructs on individual attributes within the BSON document. This helps to satisfy the secondary requirement around being able to query archive data. Instead of building an indexing agent, the documents themselves may be indexed and queried, and eventually a public API put on top of them for external parties to query.

Other benefits that MongoDB bring include:

  • At-rest encryption
  • Transport encryption
  • Sharding and scale-out
  • Authentication
  • The ability to easily self-host or run in a centralised cloud

Child Tasks

The following represent the list of child tasks that make up this project:

Reccuring InvalidArgument error in stdout converting a 32-byte number

Seeing this happen every 3 minutes in lasr's stdout:

lasr   | 2024-04-04T12:23:39.936Z ERROR [lasr_node] Custom("ERROR:\n  Code: InvalidArgument\n  Message: rpc error: code = InvalidArgument desc = encountered an error to convert a 32-bytes into a valid field element, please use the correct format where every 32bytes(big-endian) is less than 21888242871839275222246405745257275088548364400416034343698204186575808495617\n")

Here's a picture of it's recurrence:
Screenshot 2024-04-05 at 8 02 08 AM

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.