diff --git a/.kotlin/errors/errors-1766412669424.log b/.kotlin/errors/errors-1766412669424.log new file mode 100644 index 0000000000..ee91f995fc --- /dev/null +++ b/.kotlin/errors/errors-1766412669424.log @@ -0,0 +1,277 @@ +kotlin version: 2.1.10 +error message: org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering +File being compiled: /home/kennedy/Projects/StakeShuffle/stakeshuffle-android/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/repository/EphemeralAddressRepository.kt +The root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:48) + at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException(CodegenUtil.kt:253) + at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException$default(CodegenUtil.kt:236) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invokeSequential(performByIrFile.kt:55) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:42) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:28) + at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.phaseBody(CompilerPhase.kt:166) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:27) + at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:14) + at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.phaseBody(CompilerPhase.kt:166) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:62) + at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.invokeCodegen(JvmIrCodegenFactory.kt:371) + at org.jetbrains.kotlin.codegen.CodegenFactory.generateModule(CodegenFactory.kt:47) + at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModuleInFrontendIRMode(JvmIrCodegenFactory.kt:433) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.generateCodeFromIr(jvmCompilerPipeline.kt:192) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.runBackend(jvmCompilerPipeline.kt:80) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineLightTreeKt.compileModule(jvmCompilerPipelineLightTree.kt:264) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineLightTreeKt.compileSingleModuleUsingFrontendIrAndLightTree(jvmCompilerPipelineLightTree.kt:231) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineLightTreeKt.compileModulesUsingFrontendIrAndLightTree(jvmCompilerPipelineLightTree.kt:86) + at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:146) + at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:43) + at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:102) + at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.kt:316) + at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:464) + at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:73) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:506) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:423) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:301) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:129) + at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:683) + at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:91) + at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1811) + at jdk.internal.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.RuntimeException: Exception while generating code for: +FUN name:observe visibility:public modality:OPEN <> ($this:co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl) returnType:kotlinx.coroutines.flow.Flow + annotations: + OptIn(markerClass = [CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalCoroutinesApi modality:OPEN visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass] type=kotlin.Array> varargElementType=kotlin.reflect.KClass) + overridden: + public abstract fun observe (): kotlinx.coroutines.flow.Flow declared in co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepository + $this: VALUE_PARAMETER name: type:co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun observe (): kotlinx.coroutines.flow.Flow declared in co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl' + CALL 'public final fun distinctUntilChanged (): kotlinx.coroutines.flow.Flow declared in kotlinx.coroutines.flow.FlowKt' type=kotlinx.coroutines.flow.Flow origin=null + : co.electriccoin.zcash.ui.common.model.EphemeralAddress? + $receiver: CALL 'public final fun flatMapLatest (transform: kotlin.coroutines.SuspendFunction1<@[ParameterName(name = "value")] T of kotlinx.coroutines.flow.FlowKt.flatMapLatest, kotlinx.coroutines.flow.Flow>): kotlinx.coroutines.flow.Flow [inline] declared in kotlinx.coroutines.flow.FlowKt' type=kotlinx.coroutines.flow.Flow origin=null + : cash.z.ecc.android.sdk.model.AccountUuid? + : co.electriccoin.zcash.ui.common.model.EphemeralAddress? + $receiver: CALL 'public final fun distinctUntilChanged (): kotlinx.coroutines.flow.Flow declared in kotlinx.coroutines.flow.FlowKt' type=kotlinx.coroutines.flow.Flow origin=null + : cash.z.ecc.android.sdk.model.AccountUuid? + $receiver: CALL 'public final fun map (transform: kotlin.coroutines.SuspendFunction1<@[ParameterName(name = "value")] T of kotlinx.coroutines.flow.FlowKt.map, R of kotlinx.coroutines.flow.FlowKt.map>): kotlinx.coroutines.flow.Flow [inline] declared in kotlinx.coroutines.flow.FlowKt' type=kotlinx.coroutines.flow.Flow origin=null + : co.electriccoin.zcash.ui.common.model.WalletAccount? + : cash.z.ecc.android.sdk.model.AccountUuid? + $receiver: CALL 'public abstract fun (): kotlinx.coroutines.flow.Flow declared in co.electriccoin.zcash.ui.common.datasource.AccountDataSource' type=kotlinx.coroutines.flow.Flow origin=GET_PROPERTY + $this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:accountDataSource type:co.electriccoin.zcash.ui.common.datasource.AccountDataSource visibility:private [final]' type=co.electriccoin.zcash.ui.common.datasource.AccountDataSource origin=null + receiver: GET_VAR ': co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl declared in co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl.observe' type=co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl origin=null + transform: BLOCK type=kotlin.coroutines.SuspendFunction1 origin=LAMBDA + COMPOSITE type=kotlin.Unit origin=null + FUNCTION_REFERENCE 'private final fun observe$lambda$0 (it: co.electriccoin.zcash.ui.common.model.WalletAccount?, $completion: kotlin.coroutines.Continuation): kotlin.Any? [suspend] declared in co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl' type=kotlin.coroutines.SuspendFunction1 origin=INLINE_LAMBDA reflectionTarget=null + transform: BLOCK type=kotlin.coroutines.SuspendFunction1> origin=LAMBDA + COMPOSITE type=kotlin.Unit origin=null + FUNCTION_REFERENCE 'private final fun observe$lambda$1 (this$0: co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl, uuid: cash.z.ecc.android.sdk.model.AccountUuid?, $completion: kotlin.coroutines.Continuation>): kotlin.Any? [suspend] declared in co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl' type=kotlin.coroutines.SuspendFunction1> origin=INLINE_LAMBDA reflectionTarget=null + this$0: GET_VAR ': co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl declared in co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl.observe' type=co.electriccoin.zcash.ui.common.repository.EphemeralAddressRepositoryImpl origin=null + + at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:48) + at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate$default(FunctionCodegen.kt:41) + at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateMethodNode(ClassCodegen.kt:407) + at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateMethod(ClassCodegen.kt:424) + at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generate(ClassCodegen.kt:169) + at org.jetbrains.kotlin.backend.jvm.FileCodegen.lower(JvmPhases.kt:39) + at org.jetbrains.kotlin.backend.common.phaser.PhaseFactoriesKt.createFilePhase$lambda$4(PhaseFactories.kt:71) + at org.jetbrains.kotlin.backend.common.phaser.PhaseBuildersKt$createSimpleNamedCompilerPhase$1.phaseBody(PhaseBuilders.kt:69) + at org.jetbrains.kotlin.backend.common.phaser.SimpleNamedCompilerPhase.phaseBody(CompilerPhase.kt:226) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invokeSequential(performByIrFile.kt:52) + ... 46 more +Caused by: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Couldn't transform method node: +invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;: + INVOKESTATIC kotlin/coroutines/intrinsics/IntrinsicsKt.getCOROUTINE_SUSPENDED ()Ljava/lang/Object; + L0 + LINENUMBER 0 L0 + ASTORE 8 + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/EphemeralAddressRepositoryImpl$observe$$inlined$flatMapLatest$1.label : I + TABLESWITCH + 0: L1 + 1: L2 + default: L3 + L1 + ALOAD 1 + INVOKESTATIC kotlin/ResultKt.throwOnFailure (Ljava/lang/Object;)V + L4 + ALOAD 0 + GETFIELD kotlinx/coroutines/flow/FlowKt__MergeKt$flatMapLatest$1.L$0 : Ljava/lang/Object; + CHECKCAST kotlinx/coroutines/flow/FlowCollector + ASTORE 2 + L5 + ALOAD 0 + GETFIELD kotlinx/coroutines/flow/FlowKt__MergeKt$flatMapLatest$1.L$1 : Ljava/lang/Object; + ASTORE 3 + L6 + LINENUMBER 189 L6 + ALOAD 2 + ASTORE 4 + ALOAD 3 + ALOAD 0 + CHECKCAST kotlin/coroutines/Continuation + ASTORE 5 + CHECKCAST cash/z/ecc/android/sdk/model/AccountUuid + ASTORE 6 + L7 + ICONST_0 + ISTORE 7 + L8 + LINENUMBER 190 L8 + ALOAD 6 + IFNULL L9 + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/EphemeralAddressRepositoryImpl$observe$$inlined$flatMapLatest$1.this$0 : Lco/electriccoin/zcash/ui/common/repository/EphemeralAddressRepositoryImpl; + INVOKESTATIC co/electriccoin/zcash/ui/common/repository/EphemeralAddressRepositoryImpl.access$getEphemeralAddressStorageProvider$p (Lco/electriccoin/zcash/ui/common/repository/EphemeralAddressRepositoryImpl;)Lco/electriccoin/zcash/ui/common/provider/EphemeralAddressStorageProvider; + ALOAD 6 + INVOKEINTERFACE co/electriccoin/zcash/ui/common/provider/EphemeralAddressStorageProvider.observe (Lcash/z/ecc/android/sdk/model/AccountUuid;)Lkotlinx/coroutines/flow/Flow; (itf) + GOTO L10 + L9 + ACONST_NULL + INVOKESTATIC kotlinx/coroutines/flow/FlowKt.flowOf (Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow; + L10 + NOP + GOTO L11 + L12 + L13 + L11 + L14 + LINENUMBER 189 L14 + ASTORE 6 + ALOAD 4 + ALOAD 6 + CHECKCAST kotlinx/coroutines/flow/Flow + ALOAD 0 + CHECKCAST kotlin/coroutines/Continuation + ALOAD 0 + ICONST_1 + PUTFIELD co/electriccoin/zcash/ui/common/repository/EphemeralAddressRepositoryImpl$observe$$inlined$flatMapLatest$1.label : I + INVOKESTATIC kotlinx/coroutines/flow/FlowKt.emitAll (Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + L15 + DUP + ALOAD 8 + IF_ACMPNE L16 + L17 + LINENUMBER 0 L17 + ALOAD 8 + ARETURN + L2 + L18 + NOP + ALOAD 1 + INVOKESTATIC kotlin/ResultKt.throwOnFailure (Ljava/lang/Object;)V + ALOAD 1 + L16 + LINENUMBER 189 L16 + POP + NOP + GETSTATIC kotlin/Unit.INSTANCE : Lkotlin/Unit; + ARETURN + L19 + L20 + L3 + LINENUMBER 0 L3 + NEW java/lang/IllegalStateException + DUP + LDC "call to 'resume' before 'invoke' with coroutine" + INVOKESPECIAL java/lang/IllegalStateException. (Ljava/lang/String;)V + ATHROW + RETURN + LOCALVARIABLE $i$a$-flatMapLatest-EphemeralAddressRepositoryImpl$observe$2 I L8 L13 7 + LOCALVARIABLE uuid Lcash/z/ecc/android/sdk/model/AccountUuid; L7 L13 6 + LOCALVARIABLE $completion Lkotlin/coroutines/Continuation; L7 L13 5 + LOCALVARIABLE $this$transformLatest Lkotlinx/coroutines/flow/FlowCollector; L5 L19 2 + LOCALVARIABLE it Ljava/lang/Object; L6 L19 3 + LOCALVARIABLE this Lkotlinx/coroutines/flow/FlowKt__MergeKt$flatMapLatest$1; L4 L19 0 + LOCALVARIABLE $result Ljava/lang/Object; L4 L19 1 + MAXSTACK = 4 + MAXLOCALS = 9 + +File is unknown +The root cause java.lang.OutOfMemoryError was thrown at: java.base/java.util.BitSet.initWords(BitSet.java:169) + at org.jetbrains.kotlin.codegen.TransformationMethodVisitor.visitEnd(TransformationMethodVisitor.kt:89) + at org.jetbrains.org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:772) + at org.jetbrains.kotlin.codegen.inline.DeferredMethodVisitor.visitEnd(DeferredMethodVisitor.kt:31) + at org.jetbrains.kotlin.codegen.inline.AnonymousObjectTransformer.doTransform(AnonymousObjectTransformer.kt:194) + at org.jetbrains.kotlin.codegen.inline.MethodInliner$doInline$lambdaInliner$1.handleAnonymousObjectRegeneration(MethodInliner.kt:196) + at org.jetbrains.kotlin.codegen.inline.MethodInliner$doInline$lambdaInliner$1.anew(MethodInliner.kt:236) + at org.jetbrains.org.objectweb.asm.commons.InstructionAdapter.visitTypeInsn(InstructionAdapter.java:473) + at org.jetbrains.org.objectweb.asm.tree.TypeInsnNode.accept(TypeInsnNode.java:77) + at org.jetbrains.org.objectweb.asm.tree.InsnList.accept(InsnList.java:144) + at org.jetbrains.org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:751) + at org.jetbrains.kotlin.codegen.inline.MethodInliner.doInline(MethodInliner.kt:433) + at org.jetbrains.kotlin.codegen.inline.MethodInliner.doInline(MethodInliner.kt:98) + at org.jetbrains.kotlin.codegen.inline.MethodInliner.doInline(MethodInliner.kt:72) + at org.jetbrains.kotlin.codegen.inline.InlineCodegen.inlineCall(InlineCodegen.kt:127) + at org.jetbrains.kotlin.codegen.inline.InlineCodegen.performInline(InlineCodegen.kt:52) + at org.jetbrains.kotlin.backend.jvm.codegen.IrInlineCodegen.genInlineCall(IrInlineCodegen.kt:163) + at org.jetbrains.kotlin.backend.jvm.codegen.IrInlineCallGenerator.genCall(IrInlineCallGenerator.kt:36) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitCall(ExpressionCodegen.kt:598) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitCall(ExpressionCodegen.kt:134) + at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:24) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.gen(ExpressionCodegen.kt:213) + at org.jetbrains.kotlin.backend.jvm.codegen.IrCallGenerator.genValueAndPut(IrCallGenerator.kt:48) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitCall$handleParameter(ExpressionCodegen.kt:561) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitCall(ExpressionCodegen.kt:584) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitCall(ExpressionCodegen.kt:134) + at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:24) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitReturn(ExpressionCodegen.kt:1000) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitReturn(ExpressionCodegen.kt:134) + at org.jetbrains.kotlin.ir.expressions.IrReturn.accept(IrReturn.kt:24) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitStatementContainer(ExpressionCodegen.kt:524) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitBlockBody(ExpressionCodegen.kt:529) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitBlockBody(ExpressionCodegen.kt:134) + at org.jetbrains.kotlin.ir.expressions.IrBlockBody.accept(IrBlockBody.kt:20) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.generate(ExpressionCodegen.kt:236) + at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.doGenerate(FunctionCodegen.kt:124) + at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:45) + ... 56 more +Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded + at java.base/java.util.BitSet.initWords(BitSet.java:169) + at java.base/java.util.BitSet.(BitSet.java:164) + at org.jetbrains.kotlin.codegen.optimization.common.VariableLivenessFrame.(variableLiveness.kt:16) + at org.jetbrains.kotlin.codegen.optimization.common.VariableLivenessKt$analyzeLiveness$1.newFrame(variableLiveness.kt:52) + at org.jetbrains.kotlin.codegen.optimization.common.VariableLivenessKt$analyzeLiveness$1.newFrame(variableLiveness.kt:51) + at org.jetbrains.kotlin.codegen.optimization.common.BackwardAnalysisKt.analyze(backwardAnalysis.kt:48) + at org.jetbrains.kotlin.codegen.optimization.common.VariableLivenessKt.analyzeLiveness(variableLiveness.kt:51) + at org.jetbrains.kotlin.codegen.coroutines.CoroutineTransformerMethodVisitorKt.updateLvtAccordingToLiveness(CoroutineTransformerMethodVisitor.kt:1249) + at org.jetbrains.kotlin.codegen.coroutines.CoroutineTransformerMethodVisitorKt.access$updateLvtAccordingToLiveness(CoroutineTransformerMethodVisitor.kt:1) + at org.jetbrains.kotlin.codegen.coroutines.CoroutineTransformerMethodVisitor.performTransformations(CoroutineTransformerMethodVisitor.kt:210) + at org.jetbrains.kotlin.codegen.TransformationMethodVisitor.visitEnd(TransformationMethodVisitor.kt:67) + at org.jetbrains.org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:772) + at org.jetbrains.kotlin.codegen.inline.DeferredMethodVisitor.visitEnd(DeferredMethodVisitor.kt:31) + at org.jetbrains.kotlin.codegen.inline.AnonymousObjectTransformer.doTransform(AnonymousObjectTransformer.kt:194) + at org.jetbrains.kotlin.codegen.inline.MethodInliner$doInline$lambdaInliner$1.handleAnonymousObjectRegeneration(MethodInliner.kt:196) + at org.jetbrains.kotlin.codegen.inline.MethodInliner$doInline$lambdaInliner$1.anew(MethodInliner.kt:236) + at org.jetbrains.org.objectweb.asm.commons.InstructionAdapter.visitTypeInsn(InstructionAdapter.java:473) + at org.jetbrains.org.objectweb.asm.tree.TypeInsnNode.accept(TypeInsnNode.java:77) + at org.jetbrains.org.objectweb.asm.tree.InsnList.accept(InsnList.java:144) + at org.jetbrains.org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:751) + at org.jetbrains.kotlin.codegen.inline.MethodInliner.doInline(MethodInliner.kt:433) + at org.jetbrains.kotlin.codegen.inline.MethodInliner.doInline(MethodInliner.kt:98) + at org.jetbrains.kotlin.codegen.inline.MethodInliner.doInline(MethodInliner.kt:72) + at org.jetbrains.kotlin.codegen.inline.InlineCodegen.inlineCall(InlineCodegen.kt:127) + at org.jetbrains.kotlin.codegen.inline.InlineCodegen.performInline(InlineCodegen.kt:52) + at org.jetbrains.kotlin.backend.jvm.codegen.IrInlineCodegen.genInlineCall(IrInlineCodegen.kt:163) + at org.jetbrains.kotlin.backend.jvm.codegen.IrInlineCallGenerator.genCall(IrInlineCallGenerator.kt:36) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitCall(ExpressionCodegen.kt:598) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitCall(ExpressionCodegen.kt:134) + at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:24) + at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.gen(ExpressionCodegen.kt:213) + at org.jetbrains.kotlin.backend.jvm.codegen.IrCallGenerator.genValueAndPut(IrCallGenerator.kt:48) + + diff --git a/.kotlin/errors/errors-1766412670351.log b/.kotlin/errors/errors-1766412670351.log new file mode 100644 index 0000000000..211ae1df04 --- /dev/null +++ b/.kotlin/errors/errors-1766412670351.log @@ -0,0 +1,163 @@ +kotlin version: 2.1.10 +error message: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Couldn't transform method node: +toString ()Ljava/lang/String;: + @Lorg/jetbrains/annotations/NotNull;() // invisible + L0 + NEW java/lang/StringBuilder + DUP + INVOKESPECIAL java/lang/StringBuilder. ()V + LDC "TransactionSwapMetadata(depositAddress=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.depositAddress : Ljava/lang/String; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + LDC ", provider=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.provider : Ljava/lang/String; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + LDC ", totalFees=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.totalFees : Lcash/z/ecc/android/sdk/model/Zatoshi; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + LDC ", totalFeesUsd=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.totalFeesUsd : Ljava/math/BigDecimal; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + LDC ", lastUpdated=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.lastUpdated : Ljava/time/Instant; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + LDC ", origin=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.origin : Lco/electriccoin/zcash/ui/common/model/SimpleSwapAsset; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + LDC ", destination=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.destination : Lco/electriccoin/zcash/ui/common/model/SimpleSwapAsset; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + LDC ", mode=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.mode : Lco/electriccoin/zcash/ui/common/model/SwapMode; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + LDC ", status=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.status : Lco/electriccoin/zcash/ui/common/model/SwapStatus; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + LDC ", amountOutFormatted=" + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; + ALOAD 0 + GETFIELD co/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata.amountOutFormatted : Ljava/math/BigDecimal; + INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; + BIPUSH 41 + INVOKEVIRTUAL java/lang/StringBuilder.append (C)Ljava/lang/StringBuilder; + INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String; + ARETURN + L1 + NOP + L2 + LOCALVARIABLE this Lco/electriccoin/zcash/ui/common/repository/TransactionSwapMetadata; L0 L2 0 + MAXSTACK = 2 + MAXLOCALS = 1 + +File is unknown +The root cause java.lang.OutOfMemoryError was thrown at: java.base/java.util.HashSet.(HashSet.java:107) + at org.jetbrains.kotlin.codegen.TransformationMethodVisitor.visitEnd(TransformationMethodVisitor.kt:89) + at org.jetbrains.org.objectweb.asm.MethodVisitor.visitEnd(MethodVisitor.java:783) + at org.jetbrains.org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:772) + at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateMethod(ClassCodegen.kt:454) + at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generate(ClassCodegen.kt:169) + at org.jetbrains.kotlin.backend.jvm.FileCodegen.lower(JvmPhases.kt:39) + at org.jetbrains.kotlin.backend.common.phaser.PhaseFactoriesKt.createFilePhase$lambda$4(PhaseFactories.kt:71) + at org.jetbrains.kotlin.backend.common.phaser.PhaseBuildersKt$createSimpleNamedCompilerPhase$1.phaseBody(PhaseBuilders.kt:69) + at org.jetbrains.kotlin.backend.common.phaser.SimpleNamedCompilerPhase.phaseBody(CompilerPhase.kt:226) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invokeSequential(performByIrFile.kt:52) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:42) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:28) + at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.phaseBody(CompilerPhase.kt:166) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:27) + at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:14) + at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.phaseBody(CompilerPhase.kt:166) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:62) + at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.invokeCodegen(JvmIrCodegenFactory.kt:371) + at org.jetbrains.kotlin.codegen.CodegenFactory.generateModule(CodegenFactory.kt:47) + at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModuleInFrontendIRMode(JvmIrCodegenFactory.kt:433) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.generateCodeFromIr(jvmCompilerPipeline.kt:192) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.runBackend(jvmCompilerPipeline.kt:80) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineLightTreeKt.compileModule(jvmCompilerPipelineLightTree.kt:264) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineLightTreeKt.compileSingleModuleUsingFrontendIrAndLightTree(jvmCompilerPipelineLightTree.kt:231) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineLightTreeKt.compileModulesUsingFrontendIrAndLightTree(jvmCompilerPipelineLightTree.kt:86) + at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:146) + at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:43) + at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:102) + at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.kt:316) + at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:464) + at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:73) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:506) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:423) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:301) + at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:129) + at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:683) + at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:91) + at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1811) + at jdk.internal.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded + at java.base/java.util.HashSet.(HashSet.java:107) + at org.jetbrains.kotlin.codegen.optimization.temporaryVals.TemporaryVariablesEliminationTransformer.simplifyTrivialInstructions(TemporaryVariablesEliminationTransformer.kt:70) + at org.jetbrains.kotlin.codegen.optimization.temporaryVals.TemporaryVariablesEliminationTransformer.transform(TemporaryVariablesEliminationTransformer.kt:32) + at org.jetbrains.kotlin.codegen.optimization.transformer.CompositeMethodTransformer.transform(CompositeMethodTransformer.kt:25) + at org.jetbrains.kotlin.codegen.optimization.OptimizationMethodVisitor.performTransformations(OptimizationMethodVisitor.kt:74) + at org.jetbrains.kotlin.codegen.TransformationMethodVisitor.visitEnd(TransformationMethodVisitor.kt:67) + at org.jetbrains.org.objectweb.asm.MethodVisitor.visitEnd(MethodVisitor.java:783) + at org.jetbrains.org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:772) + at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateMethod(ClassCodegen.kt:454) + at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generate(ClassCodegen.kt:169) + at org.jetbrains.kotlin.backend.jvm.FileCodegen.lower(JvmPhases.kt:39) + at org.jetbrains.kotlin.backend.common.phaser.PhaseFactoriesKt.createFilePhase$lambda$4(PhaseFactories.kt:71) + at org.jetbrains.kotlin.backend.common.phaser.PhaseFactoriesKt$$Lambda$209/0x00007fe12814e898.invoke(Unknown Source) + at org.jetbrains.kotlin.backend.common.phaser.PhaseBuildersKt$createSimpleNamedCompilerPhase$1.phaseBody(PhaseBuilders.kt:69) + at org.jetbrains.kotlin.backend.common.phaser.SimpleNamedCompilerPhase.phaseBody(CompilerPhase.kt:226) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invokeSequential(performByIrFile.kt:52) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:42) + at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(performByIrFile.kt:28) + at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.phaseBody(CompilerPhase.kt:166) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:27) + at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:14) + at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.phaseBody(CompilerPhase.kt:166) + at org.jetbrains.kotlin.backend.common.phaser.AbstractNamedCompilerPhase.invoke(CompilerPhase.kt:113) + at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:62) + at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.invokeCodegen(JvmIrCodegenFactory.kt:371) + at org.jetbrains.kotlin.codegen.CodegenFactory.generateModule(CodegenFactory.kt:47) + at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModuleInFrontendIRMode(JvmIrCodegenFactory.kt:433) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.generateCodeFromIr(jvmCompilerPipeline.kt:192) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.runBackend(jvmCompilerPipeline.kt:80) + at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineLightTreeKt.compileModule(jvmCompilerPipelineLightTree.kt:264) + + diff --git a/.kotlin/errors/errors-1766412676639.log b/.kotlin/errors/errors-1766412676639.log new file mode 100644 index 0000000000..3b19f7e9b2 --- /dev/null +++ b/.kotlin/errors/errors-1766412676639.log @@ -0,0 +1,4 @@ +kotlin version: 2.1.10 +error message: java.lang.OutOfMemoryError: GC overhead limit exceeded + + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3956098aa3..24f4e51a83 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -208,6 +208,9 @@ android { } dependencies { + // implementation(files("libs/libwallet.aar")) + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) + implementation(libs.androidx.activity) implementation(libs.androidx.annotation) implementation(libs.androidx.core) diff --git a/app/libs/libwallet-sources.jar b/app/libs/libwallet-sources.jar new file mode 100644 index 0000000000..ce4986e80f Binary files /dev/null and b/app/libs/libwallet-sources.jar differ diff --git a/app/libs/libwallet.aar b/app/libs/libwallet.aar new file mode 100644 index 0000000000..6dc8b0490b Binary files /dev/null and b/app/libs/libwallet.aar differ diff --git a/app/src/main/java/co/electriccoin/zcash/app/data/Types.kt b/app/src/main/java/co/electriccoin/zcash/app/data/Types.kt new file mode 100644 index 0000000000..e8346df4fd --- /dev/null +++ b/app/src/main/java/co/electriccoin/zcash/app/data/Types.kt @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2018-2021 The Decred developers + * Use of this source code is governed by an ISC + * license that can be found in the LICENSE file. + */ + + +package co.electriccoin.zcash.app.data + +import co.electriccoin.zcash.app.util.WalletData +import com.google.gson.Gson +import com.google.gson.annotations.SerializedName +import com.google.gson.reflect.TypeToken +import libwallet.Libwallet +import java.io.Serializable + +class Accounts : Serializable { + + @SerializedName("CurrentBlockHash") + lateinit var currentBlockHash: String // base64 + + @SerializedName("CurrentBlockHeight") + var currentBlockHeight: Int = 0 + + @SerializedName("Acc") + lateinit var accounts: ArrayList +} + +fun parseAccounts(json: String): Accounts { + val gson = Gson() + return gson.fromJson(json, Accounts::class.java) +} + +class Account : Serializable { + + private val wallet: Libwallet + get() = Libwallet.loadWallet("") + + @SerializedName("WalletID") + var walletID: Long = 0 + + @SerializedName("Number") + var accountNumber: Int = 0 + + @SerializedName("Name") + lateinit var accountName: String + + @SerializedName("Balance") + lateinit var balance: Balance + + @SerializedName("TotalBalance") + var totalBalance: Long = 0 + + @SerializedName("ExternalKeyCount") + var externalKeyCount: Int = 0 + + @SerializedName("InternalKeyCount") + var internalKeyCount: Int = 0 + + @SerializedName("ImportedKeyCount") + var importedKeyCount: Int = 0 + + val hdPath: String + get() = wallet.hdPathForAccount(accountNumber) + + val isMixerUnMixedAccount: Boolean + get() = accountNumber == wallet.unmixedAccountNumber() + + val isMixerMixedAccount: Boolean + get() = accountNumber == wallet.mixedAccountNumber() + + companion object { + fun from(acc: libwallet.Account): Account { + val account = Account() + return account.apply { + walletID = acc.walletID + accountNumber = acc.number + accountName = acc.name + balance = Balance.from(acc.balance) + totalBalance = acc.totalBalance + externalKeyCount = acc.externalKeyCount + internalKeyCount = acc.internalKeyCount + importedKeyCount = acc.importedKeyCount + } + } + } +} + +fun parseAccountArray(json: String): ArrayList { + val gson = Gson() + val listType = object : TypeToken>() {}.type + return gson.fromJson(json, listType) +} + +class Balance : Serializable { + @SerializedName("Spendable") + var spendable: Long = 0 + + @SerializedName("Total") + var total: Long = 0 + + @SerializedName("ImmatureReward") + var immatureReward: Long = 0 + + @SerializedName("ImmatureStakeGeneration") + var immatureStakeGeneration: Long = 0 + + @SerializedName("LockedByTickets") + var lockedByTickets: Long = 0 + + @SerializedName("VotingAuthority") + var votingAuthority: Long = 0 + + @SerializedName("UnConfirmed") + var unConfirmed: Long = 0 + + companion object { + fun from(bal: libwallet.Balance): Balance { + val balance = Balance() + return balance.apply { + spendable = bal.spendable + total = bal.total + immatureReward = bal.immatureReward + immatureStakeGeneration = bal.immatureStakeGeneration + lockedByTickets = bal.lockedByTickets + votingAuthority = bal.votingAuthority + unConfirmed = bal.unConfirmed + } + } + } +} + +fun parseBalanceArray(json: String): ArrayList { + val gson = Gson() + val listType = object : TypeToken>() {}.type + return gson.fromJson(json, listType) +} + +class DecredAddressURI { + + var address: String = "" + var amount: Double? = null + + companion object { + fun from(uriString: String): DecredAddressURI { + + val addressURI = DecredAddressURI() + + var address: String = uriString + var amount: Double? = null + + val schemeSeparatedParts = uriString.split(":") + if (schemeSeparatedParts.size == 2 && schemeSeparatedParts[0] == "decred") { + + val addressAndQuery = schemeSeparatedParts[1].split("?") + + address = addressAndQuery[0] + if (addressAndQuery.size >= 2) { + + // get amount from query + val queryParameters = addressAndQuery[1].split("&") + for (query in queryParameters) { + val nameValuePair = query.split("=") + val queryName = nameValuePair[0] + if (nameValuePair.size == 2 && queryName == Constants.AMOUNT) { + val amountStr = nameValuePair[1] + if (amountStr.trim().isNotEmpty()) { + try { + amount = amountStr.toDouble() + } catch (e: NumberFormatException) { + e.printStackTrace() + } + } + + break + } + } + } + } + + addressURI.address = address + addressURI.amount = amount + + return addressURI + } + } +} + +class PeerInfo { + @SerializedName("id") + var id: Int = 0 + + @SerializedName("addr") + lateinit var addr: String + + @SerializedName("addr_local") + lateinit var addrLocal: String + + @SerializedName("services") + lateinit var services: String + + @SerializedName("version") + var version: Int = 0 + + @SerializedName("sub_ver") + lateinit var subVer: String + + @SerializedName("starting_height") + var startingHeight: Long = 0 + + @SerializedName("ban_score") + var banScore: Int = 0 +} \ No newline at end of file diff --git a/app/src/main/java/co/electriccoin/zcash/app/util/WalletData.kt b/app/src/main/java/co/electriccoin/zcash/app/util/WalletData.kt new file mode 100644 index 0000000000..bfb8e61691 --- /dev/null +++ b/app/src/main/java/co/electriccoin/zcash/app/util/WalletData.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2018-2021 The Decred developers + * Use of this source code is governed by an ISC + * license that can be found in the LICENSE file. + */ + +package co.electriccoin.zcash.app.util + +import libwallet.Libwallet. +/** + * Created by collins on 2/24/18. + */ + +class WalletData { + var synced = false + var peers = 0 + + // var multiWallet: MultiWallet? = null + + companion object { + val instance = WalletData() + // val multiWallet + // get() = instance.multiWallet + } + + +} diff --git a/gradle.properties b/gradle.properties index 126478e9a0..f7fa877b01 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,11 +3,12 @@ org.gradle.caching=true org.gradle.configureondemand=false # We use increased amount of heap size here to bypass the OOM exception while building the project with ./gradlew # build as described in https://github.com/Electric-Coin-Company/kotlin-bip39/issues/201 -org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=2g +org.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=6g org.gradle.parallel=true org.gradle.vfs.watch=true kotlin.mpp.stability.nowarn=true +kotlin.daemon.jvmargs=-Xmx8g android.builder.sdkDownload=true android.nonTransitiveRClass=true diff --git a/settings.gradle.kts b/settings.gradle.kts index 6bc9551654..a518c18a5a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -151,6 +151,10 @@ dependencyResolutionManagement { } // end wtf maven maven("https://jitpack.io") + + // flatDir { + // dirs("app/libs") + // } } @Suppress("MaxLineLength") diff --git a/ui-lib/build.gradle.kts b/ui-lib/build.gradle.kts index 77b43113d5..cc45b0197c 100644 --- a/ui-lib/build.gradle.kts +++ b/ui-lib/build.gradle.kts @@ -154,6 +154,7 @@ androidComponents { } dependencies { + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) implementation(libs.accompanist.permissions) implementation(libs.androidx.activity) implementation(libs.androidx.annotation) diff --git a/ui-lib/libs/libwallet-sources.jar b/ui-lib/libs/libwallet-sources.jar new file mode 100644 index 0000000000..ce4986e80f Binary files /dev/null and b/ui-lib/libs/libwallet-sources.jar differ diff --git a/ui-lib/libs/libwallet.aar b/ui-lib/libs/libwallet.aar new file mode 100644 index 0000000000..6dc8b0490b Binary files /dev/null and b/ui-lib/libs/libwallet.aar differ diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/repository/WalletRepository.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/repository/WalletRepository.kt index b57ba9b974..f64d76fd23 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/repository/WalletRepository.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/repository/WalletRepository.kt @@ -6,6 +6,7 @@ import cash.z.ecc.android.sdk.WalletInitMode import cash.z.ecc.android.sdk.model.BlockHeight import cash.z.ecc.android.sdk.model.FastestServersResult import cash.z.ecc.android.sdk.model.PersistableWallet +import libwallet.Libwallet import cash.z.ecc.android.sdk.model.SeedPhrase import cash.z.ecc.android.sdk.model.ZcashNetwork import cash.z.ecc.sdk.ANDROID_STATE_FLOW_TIMEOUT @@ -26,6 +27,7 @@ import co.electriccoin.zcash.ui.preference.StandardPreferenceKeys import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharingStarted @@ -46,6 +48,7 @@ import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.withIndex import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext interface WalletRepository { val secretState: StateFlow @@ -169,6 +172,22 @@ class WalletRepositoryImpl( persistableWalletProvider.store(persistableWallet) } + private fun createWallet( + walletName: String, + spendingKey: String, + type: Int + ) = GlobalScope.launch(Dispatchers.IO) { + // val op = this@WalletsFragment.javaClass.name + ": createWallet" + try { + val wallet = Libwallet.createWallet(walletName, spendingKey, type) + // Utils.renameDefaultAccountToLocalLanguage(requireContext(), wallet) + withContext(Dispatchers.Main) { + } + } catch (e: Exception) { + e.printStackTrace() + } + } + override fun createNewWallet() { scope.launch { persistOnboardingStateInternal(OnboardingState.READY) @@ -180,6 +199,9 @@ class WalletRepositoryImpl( endpoint = lightWalletEndpointProvider.getDefaultEndpoint(), walletInitMode = WalletInitMode.NewWallet, ) + val newWallet2 = Libwallet.createWallet( + + ) persistWalletInternal(newWallet) walletRestoringStateProvider.store(WalletRestoringState.INITIATING) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/view/OnboardingView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/view/OnboardingView.kt index 6e9e0dd293..64ba2a61e3 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/view/OnboardingView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/view/OnboardingView.kt @@ -29,7 +29,9 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import cash.z.ecc.sdk.type.ZcashCurrency import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT @@ -121,30 +123,36 @@ private fun OnboardingMainContent( Spacer(Modifier.weight(1f)) - Image( - painter = painterResource(id = co.electriccoin.zcash.ui.design.R.drawable.zashi_logo_without_text), - colorFilter = ColorFilter.tint(color = ZcashTheme.colors.secondaryColor), - contentDescription = stringResource(R.string.zcash_logo_content_description), - modifier = imageModifier - ) + // Image( + // painter = painterResource(id = co.electriccoin.zcash.ui.design.R.drawable.zashi_logo_without_text), + // colorFilter = ColorFilter.tint(color = ZcashTheme.colors.secondaryColor), + // contentDescription = stringResource(R.string.zcash_logo_content_description), + // modifier = imageModifier + // ) Spacer(modifier = Modifier.height(ZashiDimensions.Spacing.spacingSm)) - Image( - modifier = Modifier.width(220.dp), - painter = painterResource(id = co.electriccoin.zcash.ui.design.R.drawable.zashi_text_logo), - colorFilter = ColorFilter.tint(color = ZcashTheme.colors.secondaryColor), - contentDescription = null, - contentScale = ContentScale.FillWidth, + // Image( + // modifier = Modifier.width(220.dp), + // painter = painterResource(id = co.electriccoin.zcash.ui.design.R.drawable.zashi_text_logo), + // colorFilter = ColorFilter.tint(color = ZcashTheme.colors.secondaryColor), + // contentDescription = null, + // contentScale = ContentScale.FillWidth, + // ) + Text( + text = "STAKESHUFFLE", + style = ZashiTypography.textXl, + textAlign = TextAlign.Center, + color = ZashiColors.Text.textSecondary ) Spacer(modifier = Modifier.height(ZashiDimensions.Spacing.spacing3xl)) Text( - text = stringResource(R.string.onboarding_header, ZcashCurrency.getLocalizedName(LocalContext.current)), + text = stringResource(R.string.onboarding_header, "DCR"), style = ZashiTypography.textXl, textAlign = TextAlign.Center, - color = ZashiColors.Text.textSecondary + color = ZashiColors.Text.textPrimary, ) @Suppress("MagicNumber") // does not make sense to suppress this diff --git a/ui-lib/src/main/res/ui/onboarding/values/strings.xml b/ui-lib/src/main/res/ui/onboarding/values/strings.xml index 27e94740cc..0493261873 100644 --- a/ui-lib/src/main/res/ui/onboarding/values/strings.xml +++ b/ui-lib/src/main/res/ui/onboarding/values/strings.xml @@ -1,6 +1,6 @@ - A Zcash (%s) wallet built for private payments + A Decred (%s) wallet built for private payments Create New Wallet Restore Existing Wallet