0.0.0 • Published 8 years ago
arc-js2 v0.0.0
ArcJs 2
This is a proof of concept for an alternative design for Arc.js. This means that most of the things are implemeted as stubs, except for the general architecture and a small subset of things that serve as examples on how the rest of the library would look like.
The need for such a design was motivated by these main common problems in alchemy:
- Pointer chaing.
- Handling changes.
Moreover I feel that the current Arc.js does not provide much abstraction over the backend. While using the current library, you still need to know a lot of things about how Arc works to be able to use it correctly.
Benefits:
- Nice modular and composable API.
- Fully abstracts the "contracts as a service" design of Arc.
- Automatically verifies (also a security feature) and casts contracts addresses to their appropriate wrapper, by comparing the code at the address to
deployedBytecodefrom known contracts. - Extensible - allows the user to dynamically register new types of global constraints and schemes.
- Integrates well with popular frontend frameworks by treating properties of contracts as
rxjs.Observables:- In
Angular2it's easy to bind the value of theses properties in the template by using theasyncpipe:
This way the property is automatically updated in real-time.<span>{{someProperty | async}}</span> - Using
redux-observablewe can simple map propertyObservablesto a stream ofON_CHANGEactions. - With
React, we can simply use existing wrapper components from a library (like Frint) to map observable values to props for a component:const WrappedComponent = observe(() => someProperty.map(mapToProps))(Component); - We can also always simply convert an
Observableto a regularPromisebyobservable.toPromise().
- In
- Validates Arc-specific errors and raises an exception as early as possible (e.g. registering a
SchemeRegistrarwithout the required permissions). - Simulates transactions before sending to catch
reverts before they reach the blockchain. - Automatically sets the gas limit for a transaction to be exactly the gas it will spend in order to prevent loss of funds.
- Informative error messages that specify the contract address, method name, and arguments which led to a revert.
- Set of utility functions for easily writing new wrappers for custom schemes and global constraints.
0.0.0
8 years ago