环境要求
我们将使用Tezos区块链。为了使我们的Android java代码与现有的、部署的智能合约交互,我们需要使用TezosRio的TeZOSJ库。这个库有两个版本,一个是专门为使用EclipseIDE制作的通用Java应用程序编写的(TezosjPlainJava),另一个是用于Android应用程序开发的(TezosjSDK),我们将在这里使用它。我们不需要下载整个库的源代码。我们只需在build.gradle文件的dependencies部分插入一行代码,就可以了。作为我们的开发IDE,Android工作室将是我们的选择。
目标
智能合约调用
TezosJ可能是当今调用Tezos智能合约的最简单方法之一。 基本上,我们的调用可以通过一个命令完成:
选择手机和平板电脑作为您的项目类型,然后单击Empty Activity:
将项目命名为smartContractCall并将Language更改为Java。然后,单击完成:
我们要做的第一件事是从AndroidManifest.xml文件中的application标记中删除android:allowBackup =“ true”。这很关键,如果我们跳过这一步,TezosJ_SDK将不起作用:
现在是时候将TezosJ_SDK添加到我们的项目中了。打开您的build.gradle(Module: app)文件。转到依赖项部分,然后添加:实现‘com.milfont.tezos:tezosj_android:0.9.998’。 然后,单击立即同步(在窗口的右上角):
关于配置,我们差不多完成了。最后一步是在同一文件中将minSdkVersion更改为26。然后,再次同步:
全做完了! 现在我们已经准备好一切,让我们首先构建一个Tezos钱包。 在MainActivity文件的onCreate方法上,放置一个如下所示的声明(不要忘记try-catch块):
现在添加一些Logcat输出,以检查是否成功创建了我们的钱包。 我们将打印有关此信息:钱包的公钥哈希(Tezos地址),其助记词和当前余额:
添加Log.i()命令后,运行该项目,您将获得如下内容(check Logcat):
我们能够生成一个新的钱包并得到其助记符。但是尝试从区块链获取钱包余额时出现错误。这是因为我们试图直接通过MainActivity类访问Internet,而在Android环境中则禁止此类。对于本教程,让我们使用一个小的解决方法。将下面的方法放入您的MainActivity类中:
并从onCreate方法调用它:
enableStrictMode();
此处使用严格模式仅出于说明目的。 不建议直接通过MainActivity类访问Internet(在新线程中进行操作):
再次运行该项目,现在它将正常运行,并且您将能够正确查看Logcat上的钱包余额:
首先,我们需要通知TezosJ,我们将使用Tezos测试网(实际发布智能合约的地方)。我们还需要设置交易金额和费用。这是通过以下Java代码完成的:
复制代码并将其粘贴到我们的MainActivity类中,使其保持如下所示:
请注意,要使此调用正常工作,您首先需要注资并显示您的Tezos帐户。否则,您可能会收到如下错误:
There were errors: kind ‘branch’ id ‘proto.005-PsBabyM1.implicit.empty_implicit_contract’
运行项目! 如果一切正常,您将得到LogCat中显示的事务哈希(此处为onuvzSRu9GiUBtPxEVf958jPUkG8NTxo7UHCYvFXKB8Chtci3Jm):
这表明我们已成功将callContract事务发送到Tezos testnet区块链(因为我们有一个操作哈希)。 现在让我们检查交易是否被Tezos区块链接受。我们将使用TezBlock资源管理器执行此操作。在您喜欢的浏览器中打开https://tezblock.io,首先,在屏幕的右上角,将“ mainnet”更改为“ balylonnet”(与testnet相同)。 然后将我们从Java执行中获得的操作哈希值粘贴到搜索框中,然后按“ enter”键:
这将显示我们智能合约的结果以及操作细节。通过单击“display”,您将能够检查从我们的Java代码传递到Tezos区块链的参数:
参数:
Left (Left (Left (Pair (Pair (Pair 1000000 "98765") "Bob") 99876787)))
这是我们从Android应用程序调用生成的Micheline格式的参数。部署时,Tezos智能合约以Michelson语言编写,它们期望以这种格式发送的输入参数。使用TezosJ库的好处之一是它可以实时生成Micheline格式的参数,而您不必担心它是如何完成的。
结论
开发人员使用区块链智能合约从未如此简单。 特别是Tezos,提供了许多出色的工具和无数的计算机语言库,可促进与大多数系统的集成。TezosJ库通过提供一种易于使用的callContractEntryPoint方法进行创新,该方法可以即时创建Micheline格式的参数。它具有Android开发人员在与区块链无缝交互的应用程序开发中蓬勃发展所需的所有工具。