Related
I have generated accounts using the Solana CLI, but I am getting the public and private keys as
publicKey: Uint8Array(32) [
102, 255, 46, 44, 90, 176, 207, 98,
251, 66, 136, 190, 240, 59, 198, 177,
169, 35, 153, 3, 163, 68, 188, 214,
225, 46, 55, 111, 159, 157, 182, 111
],
but I want readable format to sustain key for next transaction.
You can try this
console.log(wallet.publicKey.toBase58());
Pubkey is base58 so this (dirty) vanilla (or any base58 lib) should work.
// ref: https://gist.github.com/diafygi/90a3e80ca1c2793220e5/
const MAP = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
const encode = function (B) { const A = MAP; var d = [], s = "", i, j, c, n; for (i in B) { j = 0, c = B[i]; s += c || s.length ^ i ? "" : 1; while (j in d || c) { n = d[j]; n = n ? n * 256 + c : c; c = n / 58 | 0; d[j] = n % 58; j++ } } while (j--) s += A[d[j]]; return s };
const decode = function (S) { const A = MAP; var d = [], b = [], i, j, c, n; for (i in S) { j = 0, c = A.indexOf(S[i]); if (c < 0) return undefined; c || b.length ^ i ? i : b.push(0); while (j in d || c) { n = d[j]; n = n ? n * 58 + c : c; c = n >> 8; d[j] = n % 256; j++ } } while (j--) b.push(d[j]); return new Uint8Array(b) };
encode(new Uint8Array([
102, 255, 46, 44, 90, 176, 207, 98,
251, 66, 136, 190, 240, 59, 198, 177,
169, 35, 153, 3, 163, 68, 188, 214,
225, 46, 55, 111, 159, 157, 182, 111
]))
Output
7w4GYV1BxE9Vvn93BG3NZzZQAYoiTXWnNX8rdXBgQ5Tt
i try to digest an array of bytes with SHA512
Java:
MessageDigest sha512 = MessageDigest.getInstance("SHA-512");
System.out.println("sha512: "+Arrays.toString(sha512.digest(buffer.array())));
this sample computes with input:
[18, 52, 49, 114, -101, -17, 46, -74, -108, 84, 7, -37, -51, -87, -75, 123, 113, 71, -52, 109, -69, 6, 46, 19, -108, 100, -33, 14, 74, 122, -126, -103, 81, -93]
this output:
[-6, -75, -91, -50, 3, 5, -78, -74, -63, -33, -103, 24, -18, 39, -45, -22, 30, -10, 58, -7, -2, -28, 77, 43, -78, 58, 123, -101, -12, 22, 63, 16, -56, -17, 58, 13, -26, 61, -45, -22, 100, 121, -118, -86, 53, 115, -42, 90, -70, 67, -61, 100, 54, -46, -113, -119, -95, 27, 23, -95, -76, 51, 52, 99]
how can i get the same result using CryptoJS on postman?
thanks-
Here ist the java code, that i want translate to javaScript usung CryptoJS into postman as pre-script to compute a SHA512 hash:
package hashtest;
import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import com.google.common.io.BaseEncoding;
public class SpinHash
{
private static byte[] applyChallenge(byte[] encrypted, byte[] challenge) throws NoSuchAlgorithmException {
byte[] KEY_CHALLENGE_SEPARATOR = "".getBytes();
MessageDigest sha512 = MessageDigest.getInstance("SHA-512");
ByteBuffer buffer = ByteBuffer.allocate(encrypted.length + challenge.length + KEY_CHALLENGE_SEPARATOR.length);
buffer.put(encrypted);
buffer.put(KEY_CHALLENGE_SEPARATOR);
buffer.put(challenge);
buffer.compact();
return sha512.digest(buffer.array());
}
private static String returnHashPin(String spin, String challenge) throws NoSuchAlgorithmException
{
BaseEncoding BASE16 = BaseEncoding.base16();
byte[] _challenge = BASE16.decode(challenge.toUpperCase());
byte[] _SPIN = BASE16.decode(spin.toUpperCase());
byte[] answer;
answer = applyChallenge(_SPIN, _challenge);
return BASE16.encode(answer).toUpperCase();
}
public static void main(String[] args) throws NoSuchAlgorithmException
{
System.out.println( "Hash-Wert: " + returnHashPin("1234","089C25A81BA2B17601FB89A47CEE561737AA41055AFE88766883CA9C9E7545F5") );
}
}
I feel like there should be an easy way to do this but I can not find a solution online. I'm looking for a one liner something pythonic.
I know you can do this:
Img[:,:,2]=200
but how can you add a condition to this?
if Img[:,:,2]<=100: 200
or
image =[i==100 for i in Img[:,:,2] if i <= 100]
Thanks
To simulate if a[:,:,2]<=100: 200, we can use np.where -
a[:,:,2] = np.where(a[:,:,2] <= 100, 200, a[:,:,2])
Or simply use the mask to assign -
a[a[:,:,2] <= 100,2] = 200
Sample run -
In [379]: a
Out[379]:
array([[[ 78, 134, 7],
[154, 37, 146],
[ 39, 95, 13]],
[[114, 138, 100],
[175, 198, 148],
[ 39, 130, 37]]])
In [380]: a[a[:,:,2] <= 100,2] = 200
In [381]: a
Out[381]:
array([[[ 78, 134, 200],
[154, 37, 146],
[ 39, 95, 200]],
[[114, 138, 200],
[175, 198, 148],
[ 39, 130, 200]]])
I have 2 data points as below, on plotting them I see a weired y axisl, in spite of explicitly enforcing set_yaxis - what I am doing wrong ?
xs =
[0, 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, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199]
ys=
[10828623, 5274952, 1085078, 901346, 605910, 569867, 531991, 514140, 466894, 460954, 439024, 379639, 378027, 354425, 302439, 300041, 285898, 268924, 255451, 251349, 244723, 239494, 236684, 231563, 227331, 225260, 215933, 185900, 183423, 183165, 181345, 171513, 168599, 161532, 155134, 152262, 149294, 145263, 144888, 142472, 139841, 137502, 136515, 127380, 126405, 123018, 121811, 116477, 116447, 111383, 106975, 104696, 93530, 92810, 91116, 89956, 88917, 88487, 87681, 86163, 80010, 75076, 74987, 70867, 70330, 69812, 69017, 68317, 67876, 64657, 63097, 62950, 61399, 59045, 58973, 56203, 55505, 54397, 53311, 52447, 50366, 49832, 48918, 47895, 47157, 46534, 45062, 44127, 43042, 42016, 41045, 39971, 39723, 39090, 36163, 35637, 34947, 33352, 31036, 30218, 29766, 29238, 28952, 25899, 25799, 25770, 25159, 24403, 23485, 22593, 22219, 21363, 21207, 20822, 20682, 19827, 19725, 19293, 18411, 17757, 17169, 17046, 16569, 16408, 16248, 16073, 16030, 15775, 14065, 13921, 13529, 13136, 12633, 12213, 12092, 11659, 10983, 10871, 10712, 10679, 10110, 9981, 9687, 9494, 8597, 8241, 8042, 7948, 7896, 7602, 7543, 6734, 6529, 6372, 6095, 6038, 5708, 5679, 5234, 5175, 4941, 4936, 4806, 4222, 4153, 4102, 4079, 3767, 3673, 3538, 3483, 3408, 3350, 3305, 3253, 3121, 3105, 3061, 2894, 2642, 2604, 2600, 2585, 2306, 2294, 2199, 2140, 2035, 1916, 1639, 1619, 1598, 1469, 1393, 1276, 1219, 1160, 1132, 1068, 1010]
# A stripped down code.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df1=pd.read_csv(path,sep=',',header='infer')
xs=df1["col1"] # see values above
ys=df1["col1"] # ys was orignally float , and I converted it to int.
ax1.set_ylim(min(ys),max(ys))
#(1010, 10828623)
plt.plot(xs,ys)
ax1.set_ylim(min(ys),max(ys))
#(1010, 10828623)
This is because there is a point that is 10 million + - is there a way to keep this point and yet represent this in the plot ?
Also, given that the range is so spread out, I would expect it not to show 0.4 etc, but actual numbers ,even if in the scientific notation.
plt.show()
I have a list:
def clc = [[1, 15, 30, 42, 48, 100], [58, 99], [16, 61, 85, 96, 98], [2, 63, 84, 90, 91, 97], [16, 61, 85, 96], [23, 54, 65, 95], [16, 29, 83, 94], [0, 31, 42, 93], [33, 40, 51, 56, 61, 62, 64, 89, 92], [0, 63, 84, 90, 91]]
and a sublist
def subclc = [[1, 15, 30, 42, 48, 100], [58, 99], [16, 61, 85, 96, 98], [2, 63, 84, 90, 91, 97]]
I need to remove sublist from original list
I do so:
subclc.each{
clc.remove(it)
}
but it throws an exceprion Exception in thread "main" java.util.ConcurrentModificationException
I do not understand where is problem and how to solve the problem
Short answers:
For more groovyness and immutability, preserving the original list:
def removed = clc - subclc
assert removed == [[16, 61, 85, 96], [23, 54, 65, 95], [16, 29, 83, 94], [0, 31, 42, 93], [33, 40, 51, 56, 61, 62, 64, 89, 92], [0, 63, 84, 90, 91]]
And the java way, changing the original list:
clc.removeAll subclc
assert clc == [[16, 61, 85, 96], [23, 54, 65, 95], [16, 29, 83, 94], [0, 31, 42, 93], [33, 40, 51, 56, 61, 62, 64, 89, 92], [0, 63, 84, 90, 91]]
Long answer:
You are Iterator-ing through a list while changing the list. In this case you are better using Iterator.remove(), which is being abstracted by the foreach loop.
When you change the list using the foreach loop, you bump into the iterator checks for modification using checkForComodification(). Getting the iterator explicitly works:
list1 = [10,20,30,40,50,60,70,80,90]
list2 = [50,60,80]
def iter = list1.iterator()
while (iter.hasNext()) {
def item = iter.next()
if (list2.contains(item)) iter.remove()
}
assert list1 == [10,20,30,40,70,90]
Or you can use indexes. Note you need to control the index:
list1 = [10,20,30,40,50,60,70,80,90]
list2 = [50,60,80]
for (int i = 0; i < list1.size(); i++) {
def item = list1[i]
if (list2.contains(item)) { list1.remove i-- }
}
assert list1 == [10,20,30,40,70,90]