Skip to content

Commit fc5525a

Browse files
authored
Merge branch 'openmina:develop' into develop
2 parents 3c74e42 + 2c0517b commit fc5525a

File tree

15 files changed

+153
-103
lines changed

15 files changed

+153
-103
lines changed

frontend/src/app/app.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import { Routes } from '@shared/enums/routes.enum';
2020
export class AppComponent extends StoreDispatcher implements OnInit {
2121

2222
protected readonly menu$: Observable<AppMenu> = this.select$(AppSelectors.menu);
23-
protected readonly showLandingPage$: Observable<boolean> = this.select$(getMergedRoute).pipe(filter(Boolean), map((route: MergedRoute) => route.url === '/'));
24-
protected readonly showLoadingWebNodePage$: Observable<boolean> = this.select$(getMergedRoute).pipe(filter(Boolean), map((route: MergedRoute) => route.url === `/${Routes.LOADING_WEB_NODE}`));
23+
protected readonly showLandingPage$: Observable<boolean> = this.select$(getMergedRoute).pipe(filter(Boolean), map((route: MergedRoute) => route.url === '/' || route.url.startsWith('/?')));
24+
protected readonly showLoadingWebNodePage$: Observable<boolean> = this.select$(getMergedRoute).pipe(filter(Boolean), map((route: MergedRoute) => route.url.startsWith(`/${Routes.LOADING_WEB_NODE}`)));
2525
subMenusLength: number = 0;
2626
hideToolbar: boolean = CONFIG.hideToolbar;
2727
loaded: boolean;

frontend/src/app/app.module.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ export class AppGlobalErrorhandler implements ErrorHandler {
4444
constructor(private errorHandlerService: GlobalErrorHandlerService) {}
4545

4646
handleError(error: any): void {
47-
console.log(123123123);
48-
Sentry.captureException(error);
4947
this.errorHandlerService.handleError(error);
5048
console.error(error);
5149
}
@@ -90,9 +88,9 @@ export class AppGlobalErrorhandler implements ErrorHandler {
9088
],
9189
providers: [
9290
THEME_PROVIDER,
93-
{ provide: ErrorHandler, useClass: AppGlobalErrorhandler, deps: [GlobalErrorHandlerService] },
9491
{ provide: LOCALE_ID, useValue: 'en' },
9592
{ provide: ErrorHandler, useValue: Sentry.createErrorHandler() },
93+
{ provide: ErrorHandler, useClass: AppGlobalErrorhandler, deps: [GlobalErrorHandlerService] },
9694
{ provide: Sentry.TraceService, deps: [Router] },
9795
{
9896
provide: APP_INITIALIZER,

frontend/src/app/core/services/web-node.service.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export class WebNodeService {
9191
return from(wasm.run(this.webNodeKeyPair.privateKey));
9292
}),
9393
tap((webnode: any) => {
94-
(window as any)['webnode'] = webnode;
94+
any(window)['webnode'] = webnode;
9595
this.webnode$.next(webnode);
9696
this.webnodeProgress$.next('Started');
9797
}),
@@ -108,14 +108,14 @@ export class WebNodeService {
108108
get status$(): Observable<any> {
109109
return this.webnode$.asObservable().pipe(
110110
filter(Boolean),
111-
switchMap(handle => from((handle as any).status())),
111+
switchMap(handle => from(any(handle).status())),
112112
);
113113
}
114114

115115
get blockProducerStats$(): Observable<any> {
116116
return this.webnode$.asObservable().pipe(
117117
filter(Boolean),
118-
switchMap(handle => from((handle as any).stats().block_producer())),
118+
switchMap(handle => from(any(handle).stats().block_producer())),
119119
);
120120
}
121121

@@ -144,42 +144,42 @@ export class WebNodeService {
144144
get messageProgress$(): Observable<any> {
145145
return this.webnode$.asObservable().pipe(
146146
filter(Boolean),
147-
switchMap(handle => from((handle as any).state().message_progress())),
147+
switchMap(handle => from(any(handle).state().message_progress())),
148148
);
149149
}
150150

151151
get sync$(): Observable<any> {
152152
return this.webnode$.asObservable().pipe(
153153
filter(Boolean),
154-
switchMap(handle => from((handle as any).stats().sync())),
154+
switchMap(handle => from(any(handle).stats().sync())),
155155
);
156156
}
157157

158158
get accounts$(): Observable<any> {
159159
return this.webnode$.asObservable().pipe(
160160
filter(Boolean),
161-
switchMap(handle => from((handle as any).ledger().latest().accounts().all())),
161+
switchMap(handle => from(any(handle).ledger().latest().accounts().all())),
162162
);
163163
}
164164

165165
get bestChainUserCommands$(): Observable<any> {
166166
return this.webnode$.asObservable().pipe(
167167
filter(Boolean),
168-
switchMap(handle => from((handle as any).transition_frontier().best_chain().user_commands())),
168+
switchMap(handle => from(any(handle).transition_frontier().best_chain().user_commands())),
169169
);
170170
}
171171

172172
sendPayment$(payment: any): Observable<any> {
173173
return this.webnode$.asObservable().pipe(
174174
filter(Boolean),
175-
switchMap(handle => from((handle as any).transaction_pool().inject().payment(payment))),
175+
switchMap(handle => from(any(handle).transaction_pool().inject().payment(payment))),
176176
);
177177
}
178178

179179
get transactionPool$(): Observable<any> {
180180
return this.webnode$.asObservable().pipe(
181181
filter(Boolean),
182-
switchMap(handle => from((handle as any).transaction_pool().get())),
182+
switchMap(handle => from(any(handle).transaction_pool().get())),
183183
);
184184
}
185185
}

frontend/src/app/features/webnode/web-node-demo-dashboard/web-node-demo-dashboard.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="logo-header w-100 border-bottom fx-row-full-cent">
22
<img ngSrc="assets/images/logo/logo-text.svg" height="40" width="136"/>
33
</div>
4-
<div class="data-wrapper flex-column w-100 overflow-auto align-center">
4+
<div class="data-wrapper border-bottom flex-column w-100 overflow-auto align-center">
55
<div class="loading-content h-100 flex-column flex-around align-center">
66
<div class="header flex-column align-center pl-10 pr-10 text-center mb-16">
77
<div class="loading-webnode f-500 mb-8">
@@ -32,7 +32,7 @@
3232
</div>
3333

3434
@if (!loading[loading.length - 1].loaded && errors.length) {
35-
<div class="flex-column w-100 pl-10 pr-10 mt-10">
35+
<div class="errors flex-column w-100 pl-10 pr-10 mt-10">
3636
<div class="flex-column w-100 bg-surface p-12 border-rad-6">
3737
<div class="w-100 font-16 flex-row flex-column-md flex-between align-center flex-start-md"
3838
[ngClass]="errors.length ? 'warn-primary' : 'aware-primary'">
@@ -47,7 +47,7 @@
4747
</div>
4848
}
4949
</div>
50-
<div class="footer border-top fx-row-vert-cent flex-between w-100 pl-10 pr-10">
50+
<div class="footer fx-row-vert-cent flex-between w-100 pl-10 pr-10">
5151
<div class="fx-row-vert-cent mr-10">
5252
<span class="mina-icon icon-300 selected-primary mr-5">lightbulb</span>
5353
<div class="selected-primary f-big f-500">

frontend/src/app/features/webnode/web-node-demo-dashboard/web-node-demo-dashboard.component.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ $white: #000000;
5252
}
5353
}
5454

55+
.errors {
56+
max-width: 568px;
57+
}
58+
5559
.footer {
5660
height: 72px;
5761
max-width: 568px;

ledger/src/proofs/block.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use crate::{
3535
transaction_logic::protocol_state::{EpochLedger, ProtocolStateView},
3636
},
3737
staged_ledger::hash::StagedLedgerHash,
38+
zkapps::intefaces::{SignedAmountBranchParam, SignedAmountInterface},
3839
Inputs, ToInputs,
3940
};
4041

@@ -1375,7 +1376,6 @@ pub mod consensus {
13751376

13761377
let (new_total_currency, _overflow) = {
13771378
let total_currency: Amount = previous_state.total_currency;
1378-
w.exists(supply_increase.force_value());
13791379
total_currency
13801380
.to_checked()
13811381
.add_signed_flagged(supply_increase, w)
@@ -1638,10 +1638,14 @@ fn block_main<'a>(
16381638
txn_statement_ledger_hashes_equal(s1, &s2, w)
16391639
};
16401640

1641-
let supply_increase = w.exists_no_check(match txn_stmt_ledger_hashes_didn_t_change {
1642-
Boolean::True => CheckedSigned::zero(),
1643-
Boolean::False => txn_snark.supply_increase.to_checked(),
1644-
});
1641+
let supply_increase = CheckedSigned::on_if(
1642+
txn_stmt_ledger_hashes_didn_t_change.var(),
1643+
SignedAmountBranchParam {
1644+
on_true: &CheckedSigned::zero(),
1645+
on_false: &txn_snark.supply_increase.to_checked(),
1646+
},
1647+
w,
1648+
);
16451649

16461650
let (updated_consensus_state, consensus_state) = consensus::next_state_checked(
16471651
previous_state,

ledger/src/proofs/numbers/currency.rs

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use crate::scan_state::currency::{self, Amount, Balance, Fee, Magnitude, MinMax, Sgn, Signed};
1+
use crate::{
2+
proofs::field::CircuitVar,
3+
scan_state::currency::{self, Amount, Balance, Fee, Magnitude, MinMax, Sgn, Signed},
4+
};
25
use std::{cell::Cell, cmp::Ordering::Less};
36

47
use crate::proofs::{
@@ -42,7 +45,7 @@ where
4245
T: CheckedCurrency<F>,
4346
{
4447
pub magnitude: T,
45-
pub sgn: Sgn,
48+
pub sgn: CircuitVar<Sgn>,
4649
pub value: Cell<Option<F>>,
4750
}
4851

@@ -65,7 +68,7 @@ where
6568
F: FieldWitness + std::fmt::Debug,
6669
T: CheckedCurrency<F> + std::fmt::Debug,
6770
{
68-
pub fn create(magnitude: T, sgn: Sgn, value: Option<F>) -> Self {
71+
pub fn create(magnitude: T, sgn: CircuitVar<Sgn>, value: Option<F>) -> Self {
6972
Self {
7073
magnitude,
7174
sgn,
@@ -77,32 +80,46 @@ where
7780
let value = magnitude.to_field();
7881
Self {
7982
magnitude,
80-
sgn: Sgn::Pos,
83+
sgn: CircuitVar::Constant(Sgn::Pos),
8184
value: Cell::new(Some(value)),
8285
}
8386
}
8487

8588
pub fn zero() -> Self {
86-
Self::of_unsigned(T::zero())
89+
Self {
90+
magnitude: T::zero(),
91+
sgn: CircuitVar::Constant(Sgn::Pos),
92+
value: Cell::new(None),
93+
}
94+
}
95+
96+
// https://github.com/MinaProtocol/mina/blob/ca9c8c86aa21d3c346d28ea0be7ad4cb0c22bf7f/src/lib/transaction_snark/transaction_snark.ml#L1891-L1892
97+
// https://github.com/MinaProtocol/mina/blob/ca9c8c86aa21d3c346d28ea0be7ad4cb0c22bf7f/src/lib/currency/currency.ml#L579
98+
pub fn constant_zero() -> Self {
99+
Self {
100+
magnitude: T::zero(),
101+
sgn: CircuitVar::Constant(Sgn::Pos),
102+
value: Cell::new(Some(T::zero().to_field())),
103+
}
87104
}
88105

89106
pub fn negate(self) -> Self {
90107
Self {
91108
magnitude: self.magnitude,
92-
sgn: self.sgn.negate(),
109+
sgn: self.sgn.map(|sgn| sgn.negate()),
93110
value: Cell::new(self.value.get().map(|f| f.neg())),
94111
}
95112
}
96113

97114
pub fn is_neg(&self) -> Boolean {
98-
match self.sgn {
115+
match self.sgn.value() {
99116
Sgn::Pos => Boolean::False,
100117
Sgn::Neg => Boolean::True,
101118
}
102119
}
103120

104121
pub fn is_pos(&self) -> Boolean {
105-
match self.sgn {
122+
match self.sgn.value() {
106123
Sgn::Pos => Boolean::True,
107124
Sgn::Neg => Boolean::False,
108125
}
@@ -112,7 +129,7 @@ where
112129
match self.value.get() {
113130
Some(x) => x,
114131
None => {
115-
let sgn: F = self.sgn.to_field();
132+
let sgn: F = self.sgn.value().to_field();
116133
let magnitude: F = self.magnitude.to_field();
117134
let value = w.exists_no_check(magnitude * sgn);
118135
self.value.replace(Some(value));
@@ -125,7 +142,7 @@ where
125142
match self.value.get() {
126143
Some(x) => x,
127144
None => {
128-
let sgn: F = self.sgn.to_field();
145+
let sgn: F = self.sgn.value().to_field();
129146
let magnitude: F = self.magnitude.to_field();
130147
magnitude * sgn
131148
}
@@ -136,7 +153,7 @@ where
136153
match self.value.get() {
137154
Some(_) => {}
138155
None => {
139-
let sgn: F = self.sgn.to_field();
156+
let sgn: F = self.sgn.value().to_field();
140157
let magnitude: F = self.magnitude.to_field();
141158
self.value.replace(Some(magnitude * sgn));
142159
}
@@ -150,7 +167,7 @@ where
150167
fn unchecked(&self) -> currency::Signed<T::Inner> {
151168
currency::Signed {
152169
magnitude: self.magnitude.to_inner(),
153-
sgn: self.sgn,
170+
sgn: *self.sgn.value(),
154171
}
155172
}
156173

@@ -185,7 +202,7 @@ where
185202

186203
let res = Self {
187204
magnitude: res_magnitude,
188-
sgn,
205+
sgn: CircuitVar::Var(sgn),
189206
value: Cell::new(Some(res_value)),
190207
};
191208
(res, overflow)
@@ -211,19 +228,22 @@ where
211228

212229
range_check::<F, CURRENCY_NBITS>(magnitude, w);
213230

214-
Self::create(T::from_field(magnitude), sgn, Some(res_value))
231+
Self::create(
232+
T::from_field(magnitude),
233+
CircuitVar::Var(sgn),
234+
Some(res_value),
235+
)
215236
}
216237

217238
pub fn equal(&self, other: &Self, w: &mut Witness<F>) -> Boolean {
218-
// We decompose this way because of OCaml evaluation order
219-
let t2 = other.value(w);
220239
let t1 = self.value(w);
240+
let t2 = other.value(w);
221241
field::equal(t1, t2, w)
222242
}
223243

224244
pub fn const_equal(&self, other: &Self, w: &mut Witness<F>) -> Boolean {
225-
let t2 = other.value(w);
226245
let t1 = self.value(w);
246+
let t2 = other.value(w);
227247
field::equal(t1, t2, w)
228248
}
229249
}
@@ -497,7 +517,7 @@ macro_rules! impl_currency {
497517
pub fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, $name<F>> {
498518
CheckedSigned {
499519
magnitude: self.magnitude.to_checked(),
500-
sgn: self.sgn,
520+
sgn: CircuitVar::Var(self.sgn),
501521
value: Cell::new(None),
502522
}
503523
}

ledger/src/proofs/to_field_elements.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ use crate::{
3232

3333
use super::{
3434
field::{Boolean, CircuitVar, FieldWitness, GroupAffine},
35-
numbers::currency::{CheckedCurrency, CheckedSigned},
3635
step::PerProofWitness,
3736
transaction::{
3837
field_to_bits, InnerCurve, PlonkVerificationKeyEvals, StepMainProofState, StepMainStatement,
@@ -799,13 +798,6 @@ impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for &T {
799798
}
800799
}
801800

802-
impl<F: FieldWitness, T: CheckedCurrency<F>> ToFieldElements<F> for CheckedSigned<F, T> {
803-
fn to_field_elements(&self, fields: &mut Vec<F>) {
804-
self.sgn.to_field_elements(fields);
805-
self.magnitude.to_field_elements(fields);
806-
}
807-
}
808-
809801
impl<F: FieldWitness> ToFieldElements<F> for InnerCurve<F> {
810802
fn to_field_elements(&self, fields: &mut Vec<F>) {
811803
let GroupAffine::<F> { x, y, .. } = self.to_affine();
@@ -826,6 +818,15 @@ impl<F: FieldWitness> ToFieldElements<F> for CircuitVar<Boolean> {
826818
}
827819
}
828820

821+
impl<F: FieldWitness> ToFieldElements<F> for CircuitVar<Sgn> {
822+
fn to_field_elements(&self, fields: &mut Vec<F>) {
823+
match self {
824+
CircuitVar::Constant(_) => (),
825+
CircuitVar::Var(var) => var.to_field_elements(fields),
826+
}
827+
}
828+
}
829+
829830
impl ToFieldElements<Fp> for StepMainStatement {
830831
fn to_field_elements(&self, fields: &mut Vec<Fp>) {
831832
let Self {

0 commit comments

Comments
 (0)