arc-js2
v0.0.0
Published
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
Downloads
3
Readme
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
deployedBytecode
from 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.Observable
s:- In
Angular2
it's easy to bind the value of theses properties in the template by using theasync
pipe:
This way the property is automatically updated in real-time.<span>{{someProperty | async}}</span>
- Using
redux-observable
we can simple map propertyObservables
to a stream ofON_CHANGE
actions. - 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
Observable
to a regularPromise
byobservable.toPromise()
.
- In
- Validates Arc-specific errors and raises an exception as early as possible (e.g. registering a
SchemeRegistrar
without the required permissions). - Simulates transactions before sending to catch
revert
s 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.