国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇)

這篇具有很好參考價(jià)值的文章主要介紹了區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

  • On-chain

給一個(gè)錢(qián)包地址發(fā)送數(shù)字貨幣, 這筆交易在全網(wǎng)廣播、被確認(rèn)、被打包進(jìn)區(qū)塊。這是發(fā)生在鏈上的,被稱為on-chain交易。on-chain錢(qián)包需要自己保管私鑰。

  • Off-chain

相對(duì)于on-chain交易是off-chain交易。通常,通過(guò)交易所進(jìn)行的交易是off-chain的,本人并沒(méi)有私鑰。私鑰在交易所,由交易所托管。所以交易所的錢(qián)包也是中心化的錢(qián)包。

  • 冷錢(qián)包

冷即離線、斷網(wǎng),也就是說(shuō)私鑰存儲(chǔ)的位置不能被網(wǎng)絡(luò)所訪問(wèn)。例如紙錢(qián)包、腦錢(qián)包、硬件錢(qián)包等等。

  • 熱錢(qián)包

熱即聯(lián)網(wǎng),也就是私鑰存儲(chǔ)在能被網(wǎng)絡(luò)訪問(wèn)的位置。 例如存放在交易所的、在線錢(qián)包網(wǎng)站、手機(jī)App錢(qián)包都屬于熱錢(qián)包。通常而言,冷錢(qián)包更加安全,熱錢(qián)包使用更加方便。

  • 非確定性錢(qián)包 錢(qián)包隨機(jī)生成

  • 確定性錢(qián)包(HD Wallets) 同一個(gè)種子,能夠派生一樣的密鑰對(duì)集合

  • 全節(jié)點(diǎn)錢(qián)包

除了保存私鑰外,全節(jié)點(diǎn)錢(qián)包還有保存了所有區(qū)塊的數(shù)據(jù),最為著名的是bitcoin-core。

  • 輕錢(qián)包

它不必保存所有區(qū)塊的數(shù)據(jù),只保存跟自己相關(guān)的數(shù)據(jù)?;究梢詫?shí)現(xiàn)去中心化。

  • 中心化錢(qián)包

在交易所中的錢(qián)包,以及類似 OKLink 提供的保險(xiǎn)柜服務(wù)。

比特幣錢(qián)包

bitcoin.org/en/develope…

  • 比特幣錢(qián)包的組成
  • 比特幣錢(qián)包地址的創(chuàng)建過(guò)程
  • BIP32
  • BIP39
  • BIP43
  • BIP44
  • BitcoinJ創(chuàng)建錢(qián)包
  • Bitcoin錢(qián)包收款和轉(zhuǎn)賬

比特幣錢(qián)包組成

比特幣錢(qián)包分為兩部分:錢(qián)包程序和錢(qián)包文件

錢(qián)包文件

保存私鑰和轉(zhuǎn)賬記錄

Wallet containing 0.01 BTC (spendable: 0.01 BTC) in:
0 pending transactions
1 unspent transactions
0 spent transactions
0 dead transactions
Last seen best block: 1384907 (2018-08-22T03:38:42Z): 0000000000000030fe01a48a7cd6b0c52909a7d019084d195ae3ebd2889c82ec

Keys:
Earliest creation time: 2018-08-20T07:51:29Z
Seed birthday: 1534751489 [2018-08-20T07:51:29Z]
Key to watch: tpubD92y4mcSrbcSxANfCgiWx7h7sGquSF4ogNPcUxC2GECSwgWBMNPMo2C8nxez2ngvSS4UfaGhSunemWoqZ6aAAzLb4WLsmQxDirfFgE9tG5J
addr:mq5gdvJDuDEmNKFPbgMn8pGm3pyJvkSsHv hash160:68e9c9e06890527cd0f0b59d83333502ac127bef (M/0H/0/0)

UNSPENT:
0.01 BTC total value (sends 0.00 BTC and receives 0.01 BTC)
confidence: Seen by 7 peers (most recently: 2018-08-22T03:33:33Z). Appeared in best chain at height 1384907, depth 1. Source: NETWORK
a82c35c2133bd357bfa462f82d75b28787afcdcd20c8b89cd2b78f48138d6e9f
updated: 2018-08-22T03:31:53Z
in PUSHDATA(71)[304402205d3e0974b4604b92e09f83950b183100bd47243c9cb548f2213a9ca26e83bdd3022018278c7ce9b65982e6c67ba9acf8e6e3898f1dad80702bb1e32c4a0b61195e0f01] PUSHDATA(33)[02f8769ecddd821cc9b75c554978b4a674df28c098e640fd0188b88bf019bc31fa]
outpoint:8294b8dcf6513ab13321d4dd1642bf1c19600a313bf1ebe8511521dcd4dd0277:0
out DUP HASH160 PUSHDATA(20)[8843beff2291c5a00aa00fbd8a541f800c83b86d] EQUALVERIFY CHECKSIG 1.1899548 BTC
out DUP HASH160 PUSHDATA(20)[68e9c9e06890527cd0f0b59d83333502ac127bef] EQUALVERIFY CHECKSIG 0.01 BTC
prps UNKNOWN

錢(qián)包程序

錢(qián)包程序,創(chuàng)建公鑰來(lái)接受satoshi,使用私鑰來(lái)使用satoshi。錢(qián)包程序可以拆分出3個(gè)獨(dú)立的模塊:公鑰分發(fā)模塊、簽名模塊、網(wǎng)絡(luò)模塊

比特幣單位:
1比特幣(Bitcoins,BTC)
0.01比特分(Bitcent,cBTC)
0.001毫比特(Milli-Bitcoins,mBTC)
0.000001微比特(Micro-Bitcoins,μBTC或uBTC)
0.00000001聰(satoshi)(基本單位)
1 bitcoin (BTC) = 1000 millibitcoins (mBTC) = 1 million microbitcoins (uBTC) = 100 million Satoshi

根據(jù)三個(gè)模塊的組合,可以分為全服務(wù)錢(qián)包、只簽名錢(qián)包(離線錢(qián)包和硬件錢(qián)包)、只分發(fā)錢(qián)包。

BIP協(xié)議

Bitcoin Improvement Proposals

BIP32

BIP32:定義了層級(jí)確定性錢(qián)包(hierarchical deterministic wallets),是一個(gè)系統(tǒng)可以從單一個(gè) seed 產(chǎn)生一樹(shù)狀結(jié)構(gòu)儲(chǔ)存多組 keypairs(私鑰和公鑰)。好處是可以方便的備份、轉(zhuǎn)移到其他相容裝置(因?yàn)槎贾恍枰?seed),以及分層的權(quán)限控制等。

作用:

  • 1、備份更容易。按照比特幣的原則,盡量不要使用同一個(gè)地址,一個(gè)地址只使用一次,這樣會(huì)導(dǎo)致頻繁備份錢(qián)包。HD錢(qián)包只需要在創(chuàng)建時(shí)保存主密鑰,通過(guò)主密鑰可以派生出所有的子密鑰。

  • 2、私鑰離線更安全。主私鑰離線存儲(chǔ),主公鑰在線使用,通過(guò)主公鑰可以派生出所有的子公鑰。例如:給每個(gè)商品提供一個(gè)收款地址。

  • 3、利于管理,權(quán)限控制。樹(shù)狀結(jié)構(gòu)類似于公司的組織架構(gòu),可以給各個(gè)部門(mén)指定一個(gè)密鑰分支。

  • 4、記賬。只使用公鑰即可記賬。

BIP39

BIP39:將seed 用方便記憶和書(shū)寫(xiě)的單字表示。一般由 12 個(gè)單字組成,稱為 mnemonic code(phrase),中文稱為助記詞或助記碼。例如: average green proud remember advance trick estate oblige trouble when cube person

Wordlists

工具

BIP43

BIP43

BIP43對(duì)BIP32樹(shù)結(jié)構(gòu)增加了子索引標(biāo)識(shí)purpose的拓展m/purpose’/*

BIP32的索引:m/0’/*

BIP44的索引:m/44’/*。

BIP44

BIP44:基于BIP32和BIP43,賦予樹(shù)狀結(jié)構(gòu)中的各層特殊的意義。讓同一個(gè) seed 可以支援多幣種、多帳戶等。各層定義如下:

m / purpose’ / coin_type’ / account’ / change / address_index

  • purporse’: 固定值44’, 代表是BIP44
  • coin_type’: 這個(gè)代表的是幣種, 可以兼容很多種幣, 比如BTC是0’, ETH是60’, 例如:btc一般是 m/44’/0’/0’/0, eth一般是 m/44’/60’/0’/0
  • account’:賬號(hào)
  • change’: 0表示外部鏈(External Chain),用戶接收比特幣,1表示內(nèi)部鏈(Internal Chain),用于接收找零
  • address_index:錢(qián)包索引

錢(qián)包最佳實(shí)踐

  • 使用助記詞(BIP39)
  • 使用層級(jí)確定性錢(qián)包(HD Wallets)(BIP32)
  • 使用多目的HD Wallets(BIP43)
  • 使用多幣種,多賬號(hào)的HD Wallets (BIP44)

比特幣錢(qián)包地址創(chuàng)建過(guò)程

1、生成128bit~256bit作為私鑰

2、通過(guò)secp256k1橢圓曲線算法得到私鑰對(duì)應(yīng)的公鑰

3、將公鑰進(jìn)行SHA-256,得到公鑰Hash

4、將3的結(jié)果進(jìn)行RIMEMD-160

5、將4中結(jié)果添加1個(gè)字節(jié)版本號(hào)

6、將5中結(jié)果進(jìn)行兩次SHA-256,取前4個(gè)字節(jié)作為checksum

7、將6中結(jié)果添加到5中結(jié)果的末尾

8、將7中結(jié)果進(jìn)行Base58,結(jié)果為比特幣地址

BitcoinJ創(chuàng)建錢(qián)包

Bitcoinj是比特幣協(xié)議Java版本實(shí)現(xiàn)的庫(kù)。

添加依賴:

dependencies {
implementation ‘org.bitcoinj:bitcoinj-core:0.14.7’
implementation ‘org.slf4j:slf4j-api:1.7.25’
implementation ‘com.squareup.okhttp3:okhttp:3.10.0’
implementation ‘com.squareup.okhttp3:logging-interceptor:3.10.0’
implementation ‘com.google.zxing:core:3.3.3’//二維碼
}

Android最大方法數(shù)的限制,60K 開(kāi)啟multiDexEnabled

android {
compileSdkVersion 28
defaultConfig {
multiDexEnabled true
}
}

dependencies {
implementation ‘com.android.support:multidex:1.0.3’
}

創(chuàng)建新錢(qián)包

File walletFile = activity.getFileStreamPath(“wallet-protobuf”);
//創(chuàng)建錢(qián)包
wallet = new Wallet(Constants.NETWORK_PARAMETERS);
//創(chuàng)建WalletFiles,設(shè)置自動(dòng)保存Wallet
WalletFiles walletFiles = wallet.autosaveToFile(walletFile, 3 * 1000, TimeUnit.MILLISECONDS, null);
//立即保存
walletFiles.saveNow();

錢(qián)包創(chuàng)建源碼分析:

  • Wallet

  • KeyChainGroup

  • DeterministicKeyChain

  • DeterministicSeed

protected DeterministicKeyChain(DeterministicSeed seed, @Nullable KeyCrypter crypter) {
this.seed = seed;
basicKeyChain = new BasicKeyChain(crypter);
if (!seed.isEncrypted()) {
rootKey = HDKeyDerivation.createMasterPrivateKey(checkNotNull(seed.getSeedBytes()));
rootKey.setCreationTimeSeconds(seed.getCreationTimeSeconds());
addToBasicChain(rootKey);
hierarchy = new DeterministicHierarchy(rootKey);
for (int i = 1; i <= getAccountPath().size(); i++) {
addToBasicChain(hierarchy.get(getAccountPath().subList(0, i), false, true));
}
initializeHierarchyUnencrypted(rootKey);
}
// Else…
// We can’t initialize ourselves with just an encrypted seed, so we expected deserialization code to do the
// rest of the setup (loading the root key).
}

獲取錢(qián)包地址

Address address = wallet.currentAddress(KeyChain.KeyPurpose.RECEIVE_FUNDS);
address.toString();

在獲取地址的過(guò)程中會(huì)調(diào)用RIMEMD-160算法處理公鑰hash:

//Utils.java
public static byte[] sha256hash160(byte[] input) {
byte[] sha256 = Sha256Hash.hash(input);
RIPEMD160Digest digest = new RIPEMD160Digest();
digest.update(sha256, 0, sha256.length);
byte[] out = new byte[20];
digest.doFinal(out, 0);
return out;
}

處理公鑰hash后會(huì)進(jìn)行Base58算法:

//VersionedChecksummedBytes.java
public final String toBase58() {
// A stringified buffer is:
// 1 byte version + data bytes + 4 bytes check code (a truncated hash)
byte[] addressBytes = new byte[1 + bytes.length + 4];
addressBytes[0] = (byte) version;
System.arraycopy(bytes, 0, addressBytes, 1, bytes.length);
byte[] checksum = Sha256Hash.hashTwice(addressBytes, 0, bytes.length + 1);
System.arraycopy(checksum, 0, addressBytes, bytes.length + 1, 4);
return Base58.encode(addressBytes);
}

從文件中加載錢(qián)包

//讀取錢(qián)包文件
File walletFile = activity.getFileStreamPath(“wallet-protobuf”);
if (walletFile.exists()) {
InputStream inputStream = new FileInputStream(walletFile);
//反序列化
wallet = new WalletProtobufSerializer().readWallet(inputStream);
//設(shè)置自動(dòng)保存
wallet.autosaveToFile(walletFile, 3 * 1000, TimeUnit.MILLISECONDS, null);
//清理錢(qián)包
wallet.cleanup();
}

創(chuàng)建地址二維碼

String s = BitcoinURI.convertToBitcoinURI(address, null, null, null);
Bitmap bitmap = Qr.bitmap(s);
BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
bitmapDrawable.setFilterBitmap(false);
mQrImageView.setImageDrawable(bitmapDrawable);

public static Bitmap bitmap(final String content) {
try {
final Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.MARGIN, 0);
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
final BitMatrix result = QR_CODE_WRITER.encode(content, BarcodeFormat.QR_CODE, 0, 0, hints);

final int width = result.getWidth();
final int height = result.getHeight();
final byte[] pixels = new byte[width * height];

for (int y = 0; y < height; y++) {
final int offset = y * width;
for (int x = 0; x < width; x++) {
pixels[offset + x] = (byte) (result.get(x, y) ? -1 : 0);
}
}

final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(pixels));
return bitmap;
} catch (final WriterException x) {
log.info(“problem creating qr code”, x);
return null;
}
}

Bitcoin錢(qián)包收款和轉(zhuǎn)賬

比特幣錢(qián)包余額需要統(tǒng)計(jì)所有錢(qián)包地址對(duì)應(yīng)的UTXO

Simplified Payment Verification (SPV):節(jié)點(diǎn)無(wú)需下載所有的區(qū)塊數(shù)據(jù),而只需要加載所有區(qū)塊頭數(shù)據(jù)(block header的大小為80B),即可驗(yàn)證這筆交易是否曾經(jīng)被比特幣網(wǎng)絡(luò)認(rèn)證過(guò)。

布隆過(guò)濾器(Bloom Filter):過(guò)濾掉那些不包含有目標(biāo)地址的交易信息,這一步能避免掉大量不相關(guān)的數(shù)據(jù)下載。

創(chuàng)建區(qū)塊鏈

//創(chuàng)建區(qū)塊鏈文件
File blockChainFile = new File(getDir(“blockstore”, Context.MODE_PRIVATE), “blockchain”);
//創(chuàng)建SPVBlockStore,管理區(qū)塊數(shù)據(jù)
blockStore = new SPVBlockStore(Constants.NETWORK_PARAMETERS, blockChainFile);
//加載檢查點(diǎn)
final InputStream checkpointsInputStream = getAssets().open(“checkpoints-testnet.txt”);
CheckpointManager.checkpoint(Constants.NETWORK_PARAMETERS, checkpointsInputStream,
blockStore, earliestKeyCreationTime);
//創(chuàng)建區(qū)塊鏈對(duì)象
blockChain = new BlockChain(Constants.NETWORK_PARAMETERS, wallet, blockStore);

同步區(qū)塊鏈

//添加網(wǎng)絡(luò)權(quán)限:

private void startup() {
Log.d(TAG, "startup: ");
peerGroup = new PeerGroup(Constants.NETWORK_PARAMETERS, blockChain);
peerGroup.setDownloadTxDependencies(0); // recursive implementation causes StackOverflowError
peerGroup.addWallet(wallet);//設(shè)置錢(qián)包,重要
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES);
peerGroup.setUserAgent(USER_AGENT, packageInfo.versionName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
peerGroup.setMaxConnections(8);
int connectTimeout = (int) (15 * DateUtils.SECOND_IN_MILLIS);
peerGroup.setConnectTimeoutMillis(connectTimeout);
int discoveryTimeout = (int) (10 * DateUtils.SECOND_IN_MILLIS);
peerGroup.addConnectedEventListener(mPeerConnectedEventListener);
peerGroup.addDisconnectedEventListener(mPeerDisconnectedEventListener);
peerGroup.addDiscoveredEventListener(mPeerDiscoveredEventListener);
peerGroup.setPeerDiscoveryTimeoutMillis(discoveryTimeout);

//添加節(jié)點(diǎn)探索器,重要
peerGroup.addPeerDiscovery(new PeerDiscovery() {
private final PeerDiscovery normalPeerDiscovery = MultiplexingDiscovery
.forServices(Constants.NETWORK_PARAMETERS, 0);

@Override
public InetSocketAddress[] getPeers(final long services, final long timeoutValue,
final TimeUnit timeoutUnit) throws PeerDiscoveryException {
return normalPeerDiscovery.getPeers(services, timeoutValue, timeoutUnit);
}

@Override
public void shutdown() {
normalPeerDiscovery.shutdown();
}
});
peerGroup.startAsync();
peerGroup.startBlockChainDownload(null);
}

比特幣收款

獲取測(cè)試用比特幣:testnet.manu.backend.hamburg/faucet 剛收到的幣可能需要幾分鐘后才能使用

//監(jiān)聽(tīng)比特幣接受事件
wallet.addCoinsReceivedEventListener(mWalletListener);
//刷新余額
Coin balance = wallet.getBalance(Wallet.BalanceType.ESTIMATED);

比特幣轉(zhuǎn)賬

比特幣測(cè)試鏈轉(zhuǎn)賬查詢 創(chuàng)建一個(gè)Tx,對(duì)Tx進(jìn)行簽名,對(duì)Tx進(jìn)行P2P網(wǎng)絡(luò)廣播

Address address = Address.fromBase58(Constants.NETWORK_PARAMETERS, to);
//轉(zhuǎn)賬金額,以mBTC為單位
Coin coin = MonetaryFormat.MBTC.parse(amount);
//創(chuàng)建請(qǐng)求
SendRequest sendRequest = SendRequest.to(address, coin);
try {
//創(chuàng)建Transaction
Transaction transaction = wallet.sendCoinsOffline(sendRequest);
//通過(guò)P2P廣播
BlockChainService.broadcastTransaction(BitcoinWalletActivity.this, transaction);
} catch (InsufficientMoneyException e) {
Toast.makeText(this, e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}

public static void broadcastTransaction(Context context, Transaction transaction) {
Intent intent = new Intent(ACTION_BROADCAST_TRANSACTION, null, context, BlockChainService.class);
intent.putExtra(ACTION_BROADCAST_TRANSACTION_HASH, transaction.getHash().getBytes());
context.startService(intent);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand: ");
if (intent != null) {
byte[] txHash = intent.getByteArrayExtra(“tx”);
if (txHash != null) {
Sha256Hash sha256Hash = Sha256Hash.wrap(txHash);
Transaction transaction = BitcoinWalletManager.getInstance().getWallet().getTransaction(sha256Hash);
peerGroup.broadcastTransaction(transaction);
Log.d(TAG, "onStartCommand: " + sha256Hash.toString());
}
}
return super.onStartCommand(intent, flags, startId);
}

以太坊錢(qián)包

github.com/ethereumboo…

以太坊錢(qián)包功能與比特幣錢(qián)包功能類似,獲取用戶余額,管理地址和密鑰,轉(zhuǎn)賬、智能合約調(diào)用。以太坊錢(qián)包一般不用在本地維護(hù)區(qū)塊鏈數(shù)據(jù),只需要使用JSON-RPC訪問(wèn)

錢(qián)包文件

KeyStore = 私鑰 + 密碼

如果使用ImToken創(chuàng)建錢(qián)包,創(chuàng)建了助記詞,密碼用來(lái)加密錢(qián)包地址對(duì)應(yīng)的子私鑰,加密的結(jié)果就是Keystore.

{
“address”: “001d3f1ef827552ae1114027bd3ecf1f086ba0f9”,
“crypto”: {
“cipher”: “aes-128-ctr”,
“ciphertext”: “233a9f4d236ed0c13394b504b6da5df02587c8bf1ad8946f6f2b58f055507ece”,
“cipherparams”: {
“iv”: “d10c6ec5bae81b6cb9144de81037fa15”
},
“kdf”: “scrypt”,
“kdfparams”: {
“dklen”: 32,
“n”: 262144,
“p”: 1,
“r”: 8,
“salt”: “99d37a47c7c9429c66976f643f386a61b78b97f3246adca89abe4245d2788407”
},
“mac”: “594c8df1c8ee0ded8255a50caf07e8c12061fd859f4b7c76ab704b17c957e842”
},
“id”: “4fcb2ba4-ccdb-424f-89d5-26cce304bf9c”,
“version”: 3
}

以太坊錢(qián)包地址創(chuàng)建過(guò)程

1、使用Secp256k1創(chuàng)建公私鑰

2、通過(guò)Keccak算法得到公鑰Hash值,進(jìn)而得到長(zhǎng)度為40的地址字符串

3、一般的,會(huì)在地址字符串簽名加前綴"0x"

Web3j創(chuàng)建錢(qián)包

Web3j

添加Web3j依賴

implementation ‘org.web3j:core:3.3.1-android’

創(chuàng)建新錢(qián)包

這里不涉及BIP協(xié)議,為非確定性錢(qián)包

Wallet.createStandard() 出現(xiàn)OOM, Out of Memory juejin.im/post/684490…

File walletDir = contextWrapper.getDir(“eth”, Context.MODE_PRIVATE);
//生成密鑰對(duì)

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。

深知大多數(shù)Android工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Android移動(dòng)開(kāi)發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開(kāi)發(fā)知識(shí)點(diǎn),真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新

如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以添加V獲取:vip204888 (備注Android)
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android

最后

寫(xiě)到這里也結(jié)束了,在文章最后放上一個(gè)小小的福利,以下為小編自己在學(xué)習(xí)過(guò)程中整理出的一個(gè)學(xué)習(xí)思路及方向,從事互聯(lián)網(wǎng)開(kāi)發(fā),最主要的是要學(xué)好技術(shù),而學(xué)習(xí)技術(shù)是一條慢長(zhǎng)而艱苦的道路,不能靠一時(shí)激情,也不是熬幾天幾夜就能學(xué)好的,必須養(yǎng)成平時(shí)努力學(xué)習(xí)的習(xí)慣,更加需要準(zhǔn)確的學(xué)習(xí)方向達(dá)到有效的學(xué)習(xí)效果。

區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android

一個(gè)人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥(niǎo)或是對(duì)IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場(chǎng)吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長(zhǎng)!
區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),2024年程序員學(xué)習(xí),區(qū)塊鏈,android
,基本涵蓋了95%以上Android開(kāi)發(fā)知識(shí)點(diǎn),真正體系化!**

由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新

如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以添加V獲?。簐ip204888 (備注Android)
[外鏈圖片轉(zhuǎn)存中…(img-NJl0eGow-1712896514698)]

最后

寫(xiě)到這里也結(jié)束了,在文章最后放上一個(gè)小小的福利,以下為小編自己在學(xué)習(xí)過(guò)程中整理出的一個(gè)學(xué)習(xí)思路及方向,從事互聯(lián)網(wǎng)開(kāi)發(fā),最主要的是要學(xué)好技術(shù),而學(xué)習(xí)技術(shù)是一條慢長(zhǎng)而艱苦的道路,不能靠一時(shí)激情,也不是熬幾天幾夜就能學(xué)好的,必須養(yǎng)成平時(shí)努力學(xué)習(xí)的習(xí)慣,更加需要準(zhǔn)確的學(xué)習(xí)方向達(dá)到有效的學(xué)習(xí)效果。

[外鏈圖片轉(zhuǎn)存中…(img-Me1LR8N2-1712896514698)]

一個(gè)人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥(niǎo)或是對(duì)IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場(chǎng)吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長(zhǎng)!
[外鏈圖片轉(zhuǎn)存中…(img-RLwpWPGF-1712896514699)]文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-858993.html

到了這里,關(guān)于區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇)

    區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇)

    On-chain 給一個(gè)錢(qián)包地址發(fā)送數(shù)字貨幣, 這筆交易在全網(wǎng)廣播、被確認(rèn)、被打包進(jìn)區(qū)塊。這是發(fā)生在鏈上的,被稱為on-chain交易。on-chain錢(qián)包需要自己保管私鑰。 Off-chain 相對(duì)于on-chain交易是off-chain交易。通常,通過(guò)交易所進(jìn)行的交易是off-chain的,本人并沒(méi)有私鑰。私鑰在交易所,

    2024年04月26日
    瀏覽(27)
  • 黑馬程序員JavaWeb開(kāi)發(fā)|案例:tlias智能學(xué)習(xí)輔助系統(tǒng)(6)解散部門(mén)

    黑馬程序員JavaWeb開(kāi)發(fā)|案例:tlias智能學(xué)習(xí)輔助系統(tǒng)(6)解散部門(mén)

    ??指路(1)(2)(3)(4)(5)?? 黑馬程序員JavaWeb開(kāi)發(fā)|案例:tlias智能學(xué)習(xí)輔助系統(tǒng)(1)準(zhǔn)備工作、部門(mén)管理_tlias智能學(xué)習(xí)輔助系統(tǒng)的需求分析-CSDN博客 https://blog.csdn.net/YOYU_/article/details/135476566 黑馬程序員JavaWeb開(kāi)發(fā)|案例:tlias智能學(xué)習(xí)輔助系統(tǒng)(2)員工管理|分頁(yè)查詢、

    2024年01月19日
    瀏覽(32)
  • 《黑馬程序員2023新版黑馬程序員大數(shù)據(jù)入門(mén)到實(shí)戰(zhàn)教程,大數(shù)據(jù)開(kāi)發(fā)必會(huì)的Hadoop、Hive,云平臺(tái)實(shí)戰(zhàn)項(xiàng)目》學(xué)習(xí)筆記總目錄

    本文是對(duì)《黑馬程序員新版大數(shù)據(jù)入門(mén)到實(shí)戰(zhàn)教程》所有知識(shí)點(diǎn)的筆記進(jìn)行總結(jié)分類。 學(xué)習(xí)視頻:黑馬程序員新版大數(shù)據(jù) 學(xué)習(xí)時(shí)總結(jié)的學(xué)習(xí)筆記以及思維導(dǎo)圖會(huì)在后續(xù)更新,請(qǐng)敬請(qǐng)期待。 前言:配置三臺(tái)虛擬機(jī),為集群做準(zhǔn)備(該篇章請(qǐng)到原視頻進(jìn)行觀看,不在文章內(nèi)詳細(xì)

    2024年02月03日
    瀏覽(101)
  • 黑馬程序員帶你快速了解區(qū)塊鏈六大特點(diǎn)

    黑馬程序員帶你快速了解區(qū)塊鏈六大特點(diǎn)

    區(qū)塊鏈上數(shù)據(jù)的驗(yàn)證、記賬、存儲(chǔ)、維護(hù)和傳輸?shù)染腔诜植际浇Y(jié)構(gòu),采用數(shù)學(xué)和算法的方法而不是中心機(jī)構(gòu)來(lái)構(gòu)建分布式節(jié)點(diǎn)之間的信任關(guān)系,從而形成非中心化的、可信任的分布式結(jié)構(gòu)。交易參與者可以自證并直接交易,不需要依賴第三方中介機(jī)構(gòu)的信任背書(shū)。 不可篡

    2024年03月25日
    瀏覽(89)
  • 區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),深入解析android核心組件和應(yīng)用框架

    區(qū)塊鏈錢(qián)包開(kāi)發(fā)(Android篇),深入解析android核心組件和應(yīng)用框架

    作用: 1、備份更容易。按照比特幣的原則,盡量不要使用同一個(gè)地址,一個(gè)地址只使用一次,這樣會(huì)導(dǎo)致頻繁備份錢(qián)包。HD錢(qián)包只需要在創(chuàng)建時(shí)保存主密鑰,通過(guò)主密鑰可以派生出所有的子密鑰。 2、私鑰離線更安全。主私鑰離線存儲(chǔ),主公鑰在線使用,通過(guò)主公鑰可以派生

    2024年03月24日
    瀏覽(28)
  • 基于Java的Android區(qū)塊鏈錢(qián)包開(kāi)發(fā)(ETH篇)

    首先要生成12個(gè)助記詞,區(qū)塊鏈開(kāi)發(fā)之生成12個(gè)助記詞

    2024年02月11日
    瀏覽(27)
  • Android程序員成長(zhǎng)之路

    Android程序員成長(zhǎng)之路

    應(yīng)該熱愛(ài)學(xué)習(xí)Android知識(shí) 具備基本的自學(xué)能力和解決問(wèn)題的能力 具備實(shí)踐能力 Java(基本) C/C++(進(jìn)階) Kotlin(基本) Python(可選) 飛書(shū)學(xué)習(xí)路線圖 學(xué)習(xí)路線圖正在完善中... 當(dāng)然讀者也可以提出寶貴建議。 我將會(huì)按照 Android學(xué)習(xí)路線圖 發(fā)布博客文章。 因本人才疏學(xué)淺,博客文章中難

    2024年02月09日
    瀏覽(27)
  • 低代碼——面向程序員,幫助程序員敏捷開(kāi)發(fā)

    低代碼——面向程序員,幫助程序員敏捷開(kāi)發(fā)

    低代碼是一套可視化開(kāi)發(fā)工具,它幫開(kāi)發(fā)者把前后端基礎(chǔ)功能寫(xiě)扎實(shí),開(kāi)發(fā)者只需要 通過(guò)填表配置或拖拽生成前端組件 的方式,即可完成后臺(tái)管理系統(tǒng)的快速搭建。由于低代碼仍需要 寫(xiě)少量?JS?代碼 ,所以低代碼開(kāi)發(fā)平臺(tái)主要面向程序員,幫助程序員敏捷開(kāi)發(fā)。 本文使用

    2024年02月01日
    瀏覽(27)
  • AI時(shí)代程序員開(kāi)發(fā)之道:ChatGPT讓程序員插上翅膀 ChatGPT讓程序員開(kāi)發(fā)效率飛起來(lái)(文末送書(shū)8.0)

    AI時(shí)代程序員開(kāi)發(fā)之道:ChatGPT讓程序員插上翅膀 ChatGPT讓程序員開(kāi)發(fā)效率飛起來(lái)(文末送書(shū)8.0)

    在現(xiàn)代軟件開(kāi)發(fā)中,時(shí)間和效率至關(guān)重要。為了提高程序員的開(kāi)發(fā)效率,人工智能技術(shù)正在成為一個(gè)強(qiáng)大的輔助工具。其中,ChatGPT 可以為程序員們帶來(lái)前所未有的幫助和便利。本文將探討 ChatGPT 如何提高程序員的開(kāi)發(fā)效率,以及給大家分享一本關(guān)于這方面內(nèi)容的書(shū)籍——《

    2024年02月08日
    瀏覽(26)
  • Android OpenCV(四十三),Android程序員面試必備的知識(shí)點(diǎn)

    Android OpenCV(四十三),Android程序員面試必備的知識(shí)點(diǎn)

    標(biāo)志位 值 含義 GC_INIT_WITH_RECT 0 使用提供的矩形初始化狀態(tài)和掩碼。 之后根據(jù)算法進(jìn)行迭代更新 GC_INIT_WITH_MASK 1 使用提供的掩碼初始化狀態(tài)。 可以組合使用GC_INIT_WITH_RECT和GC_INIT_WITH_MASK。 然后,使用GC_BGD自動(dòng)初始化ROI之外的所有像素。 GC_EVAL 2 表示算法應(yīng)該恢復(fù) GC_EVAL_FREEZE_

    2024年04月09日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包