以太坊abi簽名
① iOS應用程序如何調用以太坊智能合約
以太坊智能合約有各種各樣的用例,但到目前為止,從你的iOS應用程序中調用它們非常困難。不過如果使用 以太坊iOS開發套件 和 EtherKit ,這種情況會改善很多,你可以立即開始使用。在本教程結束時,你將能夠調用其ABI(應用程序二進制介面)中定義的任何公共合約函數。
對於這個項目,我們將使用Xcode 10.0和ContractCodegen 0.1。我們還建議使用iOS MVVM項目模板,但為了使本教程簡單,我們將使用正常的iOS項目結構。
② 如何創建比特幣/加密貨幣交易平台
這個很復雜,需要政府部門的批文。現在國家層面已經禁止加密貨幣的交易了。
③ java中怎麼樣調用eth的智能合約
一般來說,部署智能合約的步驟為:
啟動一個以太坊節點 (例如geth或者testrpc)。
使用solc編譯智能合約。 => 獲得二進制代碼。
將編譯好的合約部署到網路。(這一步會消耗以太幣,還需要使用你的節點的默認地址或者指定地址來給合約簽名。) => 獲得合約的區塊鏈地址和ABI(合約介面的JSON表示,包括變數,事件和可以調用的方法)。(譯註:作者在這里把ABI與合約介面弄混了。ABI是合約介面的二進製表示。)
用web3.js提供的JavaScript API來調用合約。(根據調用的類型有可能會消耗以太幣。)
④ android jni abifilters為什麼沒產生文件
android studio 中簡單的jni開發
Let』s Go!!!
准備工作不再需要什麼cgwin來編譯ndk(太特么操蛋了),現在只需要你下載一下NDK的庫就ok了,然後你也可以去離線下載http://www.androiddevtools.cn最新版,這里吐槽一下android studio對NDK的支持還有待提高。
效果
看下今天的效果:(安卓jni獲取 apk的包名及簽名信息)
必須的步驟
1.配置你的ndk路徑(local.properties)
ndk.dir=E:\Android\sdk\android-ndk-r11b-windows-x86_64\android-ndk-r11b
2.grale配置使用ndk(gradle.properties)
android.useDeprecatedNdk=true
3.在mole下的build.gradle添加ndk以及jni生成目錄
ndk{
moleName 「JNI_ANDROID」
abiFilters 「armeabi」, 「armeabi-v7a」, 「x86」 //輸出指定三種abi體系結構下的so庫,目前可有可無。
}
sourceSets.main{
jniLibs.srcDirs = [『libs』]
}
准備工作做好了開始寫代碼:(jni實現獲取應用的包名和簽名信息)
步驟1:先寫要實現本地方法的類,及載入庫(JNI_ANDROID也就是ndk 裡面配的moleName)
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<code class="hljs java">package com.losileeya.getapkinfo;
/**
* User: Losileeya ([email protected])
* Date: 2016-07-16
* Time: 11:09
* 類描述:
*
* @version :
*/
public class JNIUtils {
/**
* 獲取應用的簽名
* @param o
* @return
*/
public static native String getSignature(Object o);
/**
* 獲取應用的包名
* @param o
* @return
*/
public static native String getPackname(Object o);
/**
* 載入so庫或jni庫
*/
static {
System.loadLibrary("JNI_ANDROID");
}
}</code>
注意我們 的載入c方法都加了native關鍵字,然後要使用jni下的c/c++文件就必須使用System.loadLibrary()。
步驟2:使用javah命令生成.h(頭文件)
javah -jni com.losileeya.getapkinfo.JNIUtils
執行完之後你可以在mole下文件夾app\build\intermediates\classes\debug下看見生成的 .h頭文件為:
com_losileeya_getapkinfo_JNIUtils.h
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<code class="hljs vala">/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_losileeya_getapkinfo_JNIUtils */
#ifndef _Included_com_losileeya_getapkinfo_JNIUtils
#define _Included_com_losileeya_getapkinfo_JNIUtils
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jstring JNICALL Java_com_losileeya_getapkinfo_JNIUtils_getPackname(JNIEnv *, jobject, jobject);
JNIEXPORT jstring JNICALL Java_com_losileeya_getapkinfo_JNIUtils_getSignature(JNIEnv *, jobject, jobject);
#ifdef __cplusplus
}
#endif
#endif</jni.h></code>
在工程的main目錄下新建一個名字為jni的目錄,然後將剛才的.h文件剪切過來,當然文件名字是可以修改的
步驟3:根據.h文件生成相應的c/cpp文件
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<code class="hljs scala">//
// Created by Administrator on 2016/7/16.
//
#include <stdio.h>
#include <jni.h>
#include <stdlib.h>
#include "appinfo.h"
JNIEXPORT jstring JNICALL Java_com_losileeya_getapkinfo_JNIUtils_getPackname(JNIEnv *env, jobject clazz, jobject obj)
{
jclass native_class = env->GetObjectClass(obj);
jmethodID mId = env->GetMethodID(native_class, "getPackageName", "()Ljava/lang/String;");
jstring packName = static_cast<jstring>(env->CallObjectMethod(obj, mId));
return packName;
}
JNIEXPORT jstring JNICALL Java_com_losileeya_getapkinfo_JNIUtils_getSignature(JNIEnv *env, jobject clazz, jobject obj)
{
jclass native_class = env->GetObjectClass(obj);
jmethodID pm_id = env->GetMethodID(native_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");
jobject pm_obj = env->CallObjectMethod(obj, pm_id);
jclass pm_clazz = env->GetObjectClass(pm_obj);
// 得到 getPackageInfo 方法的 ID
jmethodID package_info_id = env->GetMethodID(pm_clazz, "getPackageInfo","(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
jstring pkg_str = Java_com_losileeya_getapkinfo_JNIUtils_getPackname(env, clazz, obj);
// 獲得應用包的信息
jobject pi_obj = env->CallObjectMethod(pm_obj, package_info_id, pkg_str, 64);
// 獲得 PackageInfo 類
jclass pi_clazz = env->GetObjectClass(pi_obj);
// 獲得簽名數組屬性的 ID
jfieldID signatures_fieldId = env->GetFieldID(pi_clazz, "signatures", "[Landroid/content/pm/Signature;");
jobject signatures_obj = env->GetObjectField(pi_obj, signatures_fieldId);
jobjectArray signaturesArray = (jobjectArray)signatures_obj;
jsize size = env->GetArrayLength(signaturesArray);
jobject signature_obj = env->GetObjectArrayElement(signaturesArray, 0);
jclass signature_clazz = env->GetObjectClass(signature_obj);
jmethodID string_id = env->GetMethodID(signature_clazz, "toCharsString", "()Ljava/lang/String;");
jstring str = static_cast<jstring>(env->CallObjectMethod(signature_obj, string_id));
char *c_msg = (char*)env->GetStringUTFChars(str,0);
return str;
}</jstring></jstring></stdlib.h></jni.h></stdio.h></code>
注意:要使用前得先聲明,方法名直接從h文件考過來就好了,studio目前還是很操蛋的,對於jni的支持還是不很好。
步驟4:給項目添加Android.mk和Application.mk
此步驟顯然也是不必要的,如果你需要生成so庫添加一下也好,為什麼不呢考過去改一下就好了,如果你不寫這2文件也是沒有問題的,因為debug下也是有這些so庫的。
好吧,勉強看一下這2貨:
Android.mk
?
1
2
3
4
5
<code class="hljs ruby">LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JNI_ANDROID
LOCAL_SRC_FILES =: appinfo.cpp
include $(BUILD_SHARED_LIBRARY)</code>
Application.mk
?
1
2
<code class="hljs makefile">APP_MODULES := JNI_ANDROID
APP_ABI := all</code>
android studio下External Tools的高級配置NDK一鍵javah,ndk生成so庫
eclipse開發ndk的時候你可能就配置過javah,所以android studio也可以配置,是不是很興奮:
Settings—>Tools—->External Tools就可以配置我們的終端命令了,別急一個一個來:
javah -jni 命令的配置(一鍵生成h文件)
我們先來看參數的配置:
1.Program:JDKPath\bin\javah.exe 這里配置的是javah.exe的路徑(基本一致)
2.Parametes: -classpath . -jni -d MoleFileDir/src/main/jni FileClass這里指的是定位在Mole的jni文件你指定的文件執行jni指令<喎�"/kf/ware/vc/" target="_blank" class="keylink">++IpDQo8cD48aW1nIGFsdD0="" src="/uploadfile/Collfiles/20160718/201607181017581505.png" title="\" />
我們同樣來看參數的配置:
1.Program:E:\Android\sdk\android-ndk-r11b-windows-x86_64\android-ndk-r11b\ndk-build.cmd 這里配置的是ndk下的ndk-build.cmd的路徑(自己去找下)
2.Working:MoleFileDir\src\main\
javap-s(此命令用於c掉java方法時方法的簽名)
我們同樣來看參數的配置:
1.Program:JDKPath\bin\javap.exe 這里配置的是javap.exe的路徑(基本一致)
2.Parametes: -classpathMoleFileDir/build/intermediates/classes/debug -s FileClass 這里指的是定位到build的debug目錄下執行 javap -s class文件
3.Working:MoleFileDir
這里介紹最常用的3個命令,對你的幫助應該還是很大的來看一下怎麼使用:
javah -jni的使用:選中native文件—>右鍵—>External Tools—>javah -jni
效果如下:
是不是自動生成了包名.類名的.h文件。
ndk-build的使用:選中jni文件—>右鍵—>External Tools—>ndk-build
效果如下:
是不是一鍵生成了7種so庫,你還想去debug目錄下面去找嗎
javap-s的使用:選中native文件—>右鍵—>External Tools—>javap-s
效果如下:
看見了每個方法下的descriptor屬性的值就是你所要的方法簽名。
3種一鍵生成的命令講完了,以後你用到了什麼命令都可以這樣設置,是不是很給力。
⑤ 支付智能合約的運行需要多少eth
一般來說,部署智能合約的步驟為:
- 啟動一個以太坊節點 (例如geth或者testrpc)。
- 使用solc編譯智能合約。 => 獲得二進制代碼。
- 將編譯好的合約部署到網路。(這一步會消耗以太幣,還需要使用你的節點的默認地址或者指定地址來給合約簽名。) => 獲得合約的區塊鏈地址和ABI(合約介面的JSON表示,包括變數,事件和可以調用的方法)。(譯註:作者在這里把ABI與合約介面弄混了。ABI是合約介面的二進製表示。)
- 用web3.js提供的JavaScript API來調用合約。(根據調用的類型有可能會消耗以太幣。)
⑥ 智能合約abi弄不出來怎麼辦
一般來說,部署智能合約的步驟為:
1啟動一個以太坊節點 (例如geth或者testrpc)。
2使用solc編譯智能合約。 => 獲得二進制代碼。
3將編譯好的合約部署到網路。(這一步會消耗以太幣,還需要使用你的節點的默認地址或者指定地址來給合約簽名。) => 獲得合約的區塊鏈地址和ABI(合約介面的JSON表示,包括變數,事件和可以調用的方法)。(譯註:作者在這里把ABI與合約介面弄混了。ABI是合約介面的二進製表示。)
4用web3.js提供的JavaScript API來調用合約。(根據調用的類型有可能會消耗以太幣。)
⑦ android有以太坊的軟體嗎
以太坊也使用區塊鏈技術 只是比比特幣的區塊鏈圖靈完備 開源使用更便捷 任何人都可以在以太基礎上創建自己的應用