First, let's understand how Solidity stores data:
- Storage slots are 32-byte (256-bit) containers.
- Each storage variable gets assigned to slots sequentially.
#!/usr/bin/env bash | |
set -euo pipefail | |
# Simple security scanner for vulnerable npm packages | |
# Checks all repos in an organization for specific package versions | |
# | |
# REQUIREMENTS FOR MACOS: | |
# ----------------------- | |
# 1. Install GitHub CLI: | |
# brew install gh |
#!/usr/bin/env bash | |
# cast is required: https://book.getfoundry.sh/getting-started/installation | |
[ ! -x "$(command -v cast)" ] && echo "cast is not installed, please run 'curl -L https://foundry.paradigm.xyz | bash'." && exit 1 | |
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | |
ETH_KEYSTORE_DIR=$SCRIPT_DIR/test-keystore | |
if [ ! -d "$ETH_KEYSTORE_DIR" ]; then | |
echo "Creating test keystore" |
# Lookup your existing disks and volumes | |
diskutil apfs list | |
# We will modify diskX | |
disk=diskX | |
# Assuming that the volume diskXs1 already exist, we need to mark it as a data volume before adding it to a group. | |
diskutil apfs chrole ${disk}s1 D | |
# The volume group cannot be created directly. It will be created during the creation of the 2nd volume. |
#!/bin/bash | |
if [[ ! "$1" ]] | |
then | |
echo "Usage: $(basename $0) [address]" | |
exit 1 | |
fi | |
address=$1 |
{ | |
"terminal.integrated.profiles.osx": { | |
"Bash (from brew)": { | |
"path": "/usr/local/bin/bash", | |
"args": ["-l"] | |
} | |
}, | |
"terminal.integrated.defaultProfile.osx": "Bash (from brew)" | |
} |
import { ethers } from "hardhat"; | |
async function main() { | |
let abi = `[{"constant":false,"inputs":[{"name":"_pinakion","type":"address"}],"name":"changePinakion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"RNBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"disputesWithoutJurors","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"passPhase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"governor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastDelayedSetStake","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_d |
#!/bin/bash | |
npm list -g npm-dependants || npm install -g npm-dependants | |
for p in $(npm search @kleros --parseable | cut -f1 | sort) | |
do | |
echo $p | |
npm-dependants $p | sed 's/^/├─ /g' | |
echo | |
done |
/*! For license information please see mermaid-plugin.webpack.js.LICENSE.txt */ | |
(()=>{var t={9609:t=>{"use strict";var e=/^(%20|\s)*(javascript|data)/im,n=/[^\x20-\x7E]/gim,r=/^([^:]+):/gm,i=[".","/"];t.exports={sanitizeUrl:function(t){if(!t)return"about:blank";var a,o,s=t.replace(n,"").trim();return function(t){return i.indexOf(t[0])>-1}(s)?s:(o=s.match(r))?(a=o[0],e.test(a)?"about:blank":s):"about:blank"}}},4949:(t,e,n)=>{t.exports={graphlib:n(6614),dagre:n(6478),intersect:n(8114),render:n(5787),util:n(8355),version:n(5689)}},9144:(t,e,n)=>{var r=n(8355);function i(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}t.exports={default:i,normal:i,vee:function(t,e,n,i){var a=t.append( |