Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
simon-jentzsch committed Nov 6, 2019
2 parents 2782e96 + c280e35 commit 8ca73e4
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 70 deletions.
17 changes: 9 additions & 8 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -398,14 +398,14 @@ release_mac_and_wasm:
- cp -r ../wasm_build/module js
- cd ..
- tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_mac.tar.gz in3-mac-wasm/
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_mac.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_mac.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')"
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG ${CI_COMMIT_TAG} in3_${CI_COMMIT_TAG}_mac.tar.gz
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_mac.tar.gz
- tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/bin --exclude=in3-mac-wasm/lib --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_wasm.tar.gz in3-mac-wasm/
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_wasm.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_wasm.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_wasm.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_wasm.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')"
- echo "Mac release:" $IPFS_HASH >> in3-mac-wasm/mac_release_ipfs_hash.txt
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG ${CI_COMMIT_TAG} in3_${CI_COMMIT_TAG}_wasm.tar.gz
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_wasm.tar.gz
- cd in3-mac-wasm
artifacts:
paths:
Expand Down Expand Up @@ -435,7 +435,7 @@ release_x64:
- cp -r ../wasm_build/module js
- cd ..
- tar -zcv --exclude=in3-x64/src --exclude=in3-x64/include --exclude=in3-x64/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x64.tar.gz in3-x64/
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_x64.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_x64.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')"
- echo "x64 release:" $IPFS_HASH >> in3-x64/x64_release_ipfs_hash.txt
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_x64.tar.gz
Expand Down Expand Up @@ -469,7 +469,7 @@ release_x86:
- cp -r ../wasm_build/module js
- cd ..
- tar -zcv --exclude=in3-x86/src --exclude=in3-x86/include --exclude=in3-x86/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x86.tar.gz in3-x86/
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_x86.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_x86.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_x86.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_x86.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')"
- echo "x86 release:" $IPFS_HASH >> in3-x86/x86_release_ipfs_hash.txt
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_x86.tar.gz
Expand Down Expand Up @@ -504,7 +504,7 @@ release_arm7:
- cp -r ../wasm_build/module js
- cd ..
- tar -zcv --exclude=in3-arm7/src --exclude=in3-arm7/include --exclude=in3-arm7/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_arm7.tar.gz in3-arm7/
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_arm7.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_arm7.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_arm7.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_arm7.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')"
- echo "arm7 release:" $IPFS_HASH >> in3-arm7/arm7_release_ipfs_hash.txt
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_arm7.tar.gz
Expand Down Expand Up @@ -543,7 +543,7 @@ release_win:
- cp -r ../wasm_build/module js
- cd ..
- tar -zcv --exclude=in3-win/src --exclude=in3-win/include --exclude=in3-win/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_windows.tar.gz in3-win/
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_windows.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_windows.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_windows.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_windows.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}')
- "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')"
- echo "windows release:" $IPFS_HASH >> in3-win/win_release_ipfs_hash.txt
- ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_windows.tar.gz
Expand Down Expand Up @@ -740,3 +740,4 @@ github_body_release:
- cat in3-arm7/arm7_release_ipfs_hash.txt >> release_ipfs_hash.txt
- cat in3-win/win_release_ipfs_hash.txt >> release_ipfs_hash.txt
- ghr -u slockIt -r in3-c -b $(cat release_ipfs_hash.txt) $CI_COMMIT_TAG release_ipfs_hash.txt

5 changes: 3 additions & 2 deletions scripts/build_wasm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
cd ..; rm -rf build/*
docker run \
--rm \
-v $(pwd):/src \
-v $(pwd):$(pwd) \
docker.slock.it/build-images/cmake:clang10 \
/bin/bash -c "cd /src/build; emconfigure cmake -DWASM=true -DWASM_EMBED=false -DTRANSPORTS=false -DBUILD_DOC=false -DIN3API=true -DIN3_LIB=false -DCMD=false -DUSE_CURL=false -DCMAKE_BUILD_TYPE=MINSIZEREL .. && make -j8 in3w"
/bin/bash -c "cd /$(pwd)/build; emconfigure cmake -DWASM=true -DWASM_EMBED=false -DTRANSPORTS=false -DBUILD_DOC=false -DIN3API=true -DIN3_LIB=false -DCMD=false -DUSE_CURL=false -DCMAKE_BUILD_TYPE=MINSIZEREL .. && make -j8 in3w"

cd scripts
# /bin/bash -c "cd /$(pwd)/build; emconfigure cmake -DWASM=true -DWASM_EMBED=false -DTRANSPORTS=false -DBUILD_DOC=false -DIN3API=true -DIN3_LIB=false -DCMD=false -DUSE_CURL=false -DCMAKE_BUILD_TYPE=MINSIZEREL .. && make -j8 in3w"
8 changes: 6 additions & 2 deletions src/bindings/wasm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,12 @@
include(${PROJECT_SOURCE_DIR}/compiler.cmake)


set(EMC_PROPS "-O3 -s ASSERTIONS=1 -s TOTAL_MEMORY=524288 -s TOTAL_STACK=262144 -s EXPORT_NAME=in3w -s WASM=1 -s ENVIRONMENT_MAY_BE_SHELL=0 -s FILESYSTEM=0 -s ASYNCIFY=1 -s 'ASYNCIFY_IMPORTS=[\"transport_send\",\"sign_send\"]' -s 'EXTRA_EXPORTED_RUNTIME_METHODS=[\"ccall\", \"cwrap\"]'")
#set(EMC_PROPS "${EMC_PROPS} -s ASSERTIONS=1")
set(EMC_PROPS "-Oz -s TOTAL_MEMORY=1048576 -s TOTAL_STACK=262144 -s EXPORT_NAME=in3w -s WASM=1 -s ENVIRONMENT_MAY_BE_SHELL=0 -s FILESYSTEM=0 -s ASYNCIFY=1 -s 'ASYNCIFY_IMPORTS=[\"transport_send\",\"sign_send\"]' -s 'EXTRA_EXPORTED_RUNTIME_METHODS=[\"ccall\", \"cwrap\"]'")
IF (CMAKE_BUILD_TYPE MATCHES Debug)
set(EMC_PROPS "${EMC_PROPS} -g -s ASSERTIONS=1")
# set(EMC_PROPS "${EMC_PROPS} --source-map-base 'http://localhost/build/bin/' --emit-symbol-map -g -s ASSERTIONS=1 ")
ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)


if (WASM_EMBED)
set(EMC_PROPS "${EMC_PROPS} -s SUPPORT_BASE64_EMBEDDING=0 -s SINGLE_FILE=1")
Expand Down
62 changes: 33 additions & 29 deletions src/bindings/wasm/in3.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,19 @@ else {
}
}

// we have to store the resultstring in this special map since we cannot call a c-function while unwinded
let response_counter = 1
const responses = {}
function add_response(s) {
responses['' + response_counter] = s
return response_counter++
}
function get_response(n) {
const r = responses['' + n]
delete responses['' + n]
return r
}

// signer-delegate
in3w.sign_js = async (clientPtr, type, message, account) => {
const c = clients['' + clientPtr]
Expand All @@ -131,8 +144,7 @@ in3w.onRuntimeInitialized = _ => {
o.forEach(_ => _(true))
}

// for all pending Requests we hold the finalize function which will be called by the wasm when done.
in3w.pendingRequests = {}


function throwLastError() {
const er = in3w.ccall('in3_last_error', 'string', [], []);
Expand Down Expand Up @@ -205,35 +217,27 @@ class IN3 {
if (!r) throwLastError();

// now send
return new Promise((resolve, reject) => {
// we add the pending request with pointer as key.
in3w.pendingRequests[r + ''] = () => {
// check if it was an error...
const er = in3w.ccall('request_get_error', 'string', ['number'], [r])
// if not we ask for the result.
const res = er ? '' : in3w.ccall('request_get_result', 'string', ['number'], [r])

// we always need to cleanup
in3w.ccall('in3_free_request', 'void', ['number'], [r])
delete in3w.pendingRequests[r + '']

// resolve or reject the promise.
if (er) reject(new Error(er))
else {
try {
const r = JSON.parse(res)
if (r) delete r.in3
resolve(r)
}
catch (ex) {
reject(ex)
}
}
// we add the pending request with pointer as key.
function checkResponse(error) {
// check if it was an error...
const er = error || in3w.ccall('request_get_error', 'string', ['number'], [r])
// if not we ask for the result.
const res = er ? '' : in3w.ccall('request_get_result', 'string', ['number'], [r])

// we always need to cleanup
in3w.ccall('in3_free_request', 'void', ['number'], [r])

// resolve or reject the promise.
if (er) throw new Error(er)
else {
const r = JSON.parse(res)
if (r) delete r.in3
return r
}
}

// send the request.
in3w.ccall('in3_send_request', 'void', ['number'], [r], { async: true });
})
// send the request.
return in3w.ccall('in3_send_request', 'void', ['number'], [r], { async: true }).then(checkResponse, checkResponse)
}

async sendRPC(method, params) {
Expand Down
50 changes: 21 additions & 29 deletions src/bindings/wasm/wasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,17 +93,11 @@ void storage_set_item(void* cptr, char* key, bytes_t* content) {
}

// clang-format off
EM_JS(void, transport_send, (in3_response_t* result, char* url, char* payload), {
Asyncify.handleSleep(function(wakeUp) {
EM_JS(int, transport_send, (in3_response_t* result, char* url, char* payload), {
return Asyncify.handleSleep(function(wakeUp) {
Module.transport(UTF8ToString(url),UTF8ToString(payload))
.then(res => {
Module.ccall('request_set_result','void',['number','string'],[result,res]);
wakeUp();
})
.catch(res => {
Module.ccall('request_set_error','void',['number','string'],[result,res.message || res]);
wakeUp();
})
.then(res => wakeUp(add_response(res)))
.catch(res => wakeUp(add_response('Error: '+ (res.message || res))))
});
});

Expand All @@ -122,8 +116,10 @@ EM_JS(int, sign_send, (void* wallet, d_signature_type_t type, char* message, cha
});
});

EM_JS(void, in3_req_done, (in3_ctx_t* ctx), {
Module.pendingRequests[ctx+""]();

EM_JS(char*, get_c_response, (int n), {
const s = get_response(n);
return s ? allocateUTF8(s) : NULL;
});

in3_ret_t in3_sign_msg(void* ctx, d_signature_type_t type, bytes_t message, bytes_t account, uint8_t* dst) {
Expand All @@ -140,9 +136,19 @@ in3_ret_t in3_sign_msg(void* ctx, d_signature_type_t type, bytes_t message, byte
// clang-format on

int in3_fetch(in3_request_t* req) {
for (int i = 0; i < req->urls_len; i++)
transport_send(req->results + i, req->urls[i], req->payload);
return IN3_OK;
int ret = -1;
for (int i = 0; i < req->urls_len; i++) {
char* resp = get_c_response(transport_send(req->results + i, req->urls[i], req->payload));
if (resp && *resp == *req->payload) {
ret = IN3_OK;
sb_add_chars(&req->results[i].result, resp);
} else if (resp)
sb_add_chars(&req->results[i].error, resp);
else
sb_add_chars(&req->results[i].error, "Unknown error fetching the response");
if (resp) free(resp);
}
return ret;
}

in3_t* EMSCRIPTEN_KEEPALIVE in3_create() {
Expand Down Expand Up @@ -192,19 +198,13 @@ in3_ctx_t* EMSCRIPTEN_KEEPALIVE in3_create_request(in3_t* c, char* payload) {
void EMSCRIPTEN_KEEPALIVE in3_send_request(in3_ctx_t* ctx) {
in3_set_error(NULL);
in3_send_ctx(ctx);
ctx->client = NULL;
in3_req_done(ctx);
}

void EMSCRIPTEN_KEEPALIVE in3_free_request(in3_ctx_t* ctx) {
if (ctx->request_context && ctx->request_context->c) free(ctx->request_context->c);
free_ctx(ctx);
}

bool EMSCRIPTEN_KEEPALIVE request_is_done(in3_ctx_t* r) {
return r->client == NULL;
}

char* EMSCRIPTEN_KEEPALIVE request_get_result(in3_ctx_t* r) {
if (r->error) return NULL;
// we have a result and copy it
Expand All @@ -217,14 +217,6 @@ char* EMSCRIPTEN_KEEPALIVE request_get_error(in3_ctx_t* r) {
return r->error;
}

void EMSCRIPTEN_KEEPALIVE request_set_result(in3_response_t* r, char* data) {
sb_add_chars(&r->result, data);
}

void EMSCRIPTEN_KEEPALIVE request_set_error(in3_response_t* r, char* data) {
sb_add_chars(&r->error, data);
}

uint8_t* EMSCRIPTEN_KEEPALIVE keccak(uint8_t* data, int len) {
bytes_t src = bytes(data, len);
uint8_t* result = malloc(32);
Expand Down

0 comments on commit 8ca73e4

Please sign in to comment.