ðãã«ãã·ã°ã»AAã»MPCã«ã€ããŠãWeb3 ã»ãã¥ãªãã£ã
çãããããã«ã¡ã¯ïŒ
å æ¥ãUNCHAINã§ãã«ãã·ã°ãããŒããšããå匷äŒã宿œããã®ã§ãããæãã®ã»ãåé¿ããããŸããã®ã§å€ãã®æ¹ã«ã·ã§ã¢ããããšæããããã°ã§ããŸãšããããšã«ããŸããïŒ
ãã² UNCHAINã«èå³ã®ããæ¹ã¯äžã®ãªã³ã¯ãããšã³ããªãŒããŠã¿ãŠãã ããïŒ
æ¬åœã«çŽ æŽãããã³ãã¥ããã£ã§ããïŒïŒ
ç®æ¬¡
- ãã«ãã·ã°ã«ã€ããŠ
- ãã«ãã·ã°ã³ã³ãã©ã¯ãã®å®è£ äŸã«ã€ããŠ
- ãã¢
- æ®èª²é¡ãšæ¡åŒµæ§ã«ã€ããŠ
- ãã«ãã·ã°ãšã³ã³ãã©ã¯ããŠã©ã¬ããã«ã€ããŠ
- ãã«ãã·ã° VS MPC
- æåŸã«
1. ãã«ãã·ã°ã«ã€ããŠ
ãããããã«ãã·ã°ãšã¯ïŒ
æ¥æ¬ã®æå·è³ç£äº€ææã§ããã°ã亀ææã®ã©ã€ã³ã»ã³ã¹ãååŸããããã«é¡§å®¢è³ç£ãã³ãŒã«ããŠã©ã¬ãããšãã«ãã·ã°ã®ä»çµã¿ãå©çšããŠç®¡çããããšã¯å¿ é ãšãªã£ãŠããŸãïŒ
倧äºãªé¡§å®¢è³ç£(ãããèšå€§ãªé¡)ã管çããããšã«ãªãã®ã§ãå éšäžæ£ãé²ããšããæå³ã§ãã«ãã·ã°ã¯éèŠãªéµãæ¡ã£ãŠãããšèããŠããŸãã
ðœ æåãªæå·è³ç£äº€ææã§ãåãå ¥ããããŠããŸãïŒ
ãããã³ã€ã³ãšã€ãŒãµãªã¢ã ã§ã®å®è£ ã®éã
ãã«ãã·ã°ãšãã£ãŠããã®å®è£ æ¹æ³ã¯ããããã³ã«ã¬ã€ã€ãŒã§ãããããã¯ãã§ãŒã³ã®ä»æ§ã«ããªãå·Šå³ãããããšã«ãªããäŸãã°ããããã³ã€ã³ãšã€ãŒãµãªã¢ã ãæ¯èŒããŠãæ¬¡ã®æ§ãªéãããããŸãã
ãããã³ã€ã³ | ã€ãŒãµãªã¢ã | |
---|---|---|
æšæºã§ããã | ãã«ãã·ã°ã¯æšæºä»æ§ãšããŠååšããŠããã | ãã«ãã·ã°ã¯æšæºä»æ§ã§ã¯ãªãã |
éçºèšèªç | bitcore-jsãªã©ã®ã©ã€ãã©ãªã䜿ãã°ãã«ãã·ã°ãŠã©ã¬ãããäœæããããšãã§ããã | æšæºã§ã¯ãªãã®ã§Solidityãªã©ã§èªåéã§äœããäºæ¥è ãæäŸããŠãããã®ãå©çšããå¿ èŠããã |
ã»ãã¥ãªãã£äžã®çæç¹ | æšæºã©ã€ãã©ãªã®æ©èœãšããŠæäŸãããŠããã®ã§ãã®ã©ã€ãã©ãªãä¿¡ãããããªãããäžãäžè匱æ§ãèŠã€ãã£ãå Žåã«ã¯ããŒãžã§ã³ã¢ãããªã©ã®å¯Ÿå¿ãå¿ èŠ | ã³ãŒããæžãããšã«ãªããããåçšã®éã«ã¯ç£æ»ã®å®æœãå¿ é ãšãªãããã®ä»ãSolidityã®ä»æ§ãææ¡ããäžã§ã³ãŒãã£ã³ã°ããŠããããšãå¿ èŠã |
äžèšã¯ããããã³ã€ã³ãšã€ãŒãµãªã¢ã ãæ¯èŒããå Žåã®è©±ããã®ä»ã®ãã§ãŒã³ãèæ ®ããå¿ èŠããããã®ã§æ¥æ¬ã®äº€ææã¯æ°ãããã§ãŒã³ã«å¯Ÿå¿ããã®ã«ããªãèŠåŽããŠããã®ã§ã¯ãªãããšèããããŸãã»ã»ã
2. ãã«ãã·ã°ã³ã³ãã©ã¯ãã®å®è£ äŸã«ã€ããŠ
ä»åã¯ãéåžžã«ã·ã³ãã«ãªãã«ãã·ã°ã³ã³ãã©ã¯ãã®ä»çµã¿ããã³ãçµµã«ãŸãšããŠã¿ãŸããïŒ
factoryã³ã³ãã©ã¯ããä»ããŠãã«ãã·ã°ã³ã³ãã©ã¯ããçæããããšã§ã䜿ãç°å¢ã«ãã£ãownerã®ã¢ãã¬ã¹æ°ãšéŸå€ã決ããããšãã§ããŸãïŒ
ãã®å Žåã§ããã°äžèšã®ããã«åŠçãé²ããŠç®çã®ã¢ãã¬ã¹ã«ééããŸãïŒ
æ žãšãªãMulitiSigWalletã³ã³ãã©ã¯ãã«ã¯ã³ã¡ã³ããæ¯ã£ãŠãããœãŒã¹ã³ãŒããããã®ã§ãæ¯éãåèã«ããŠããã ããã°ãšæããŸãïŒ
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
/**
* MultiSigWalletã³ã³ãã©ã¯ã
*/
contract MultiSigWallet {
// ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿çšã®æ§é äœãå®çŸ©
struct Transaction {
// éä¿¡å
ã®ã¢ãã¬ã¹
address to;
// ééé¡
uint value;
// ãã©ã³ã¶ã¯ã·ã§ã³ã®ãã€ãããŒã¿
bytes data;
// å®è¡æžã¿ã®ãã©ã°
bool executed;
}
// ãã«ãã·ã°ãŠã©ã¬ããã®åå
string public walletName;
// Ownerã®ã¢ãã¬ã¹ãæ ŒçŽããé
å
address[] public owners;
// éŸå€
uint public required;
// ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãæ ŒçŽããé
å
Transaction[] public transactions;
// ã¢ãã¬ã¹ãšowneræš©éã®æç¡ãçŽä»ããmap
mapping(address => bool) public isOwner;
// ãã©ã³ã¶ã¯ã·ã§ã³IDæ¯ã«onwerã®æ¿èªç¶æ³ãçŽã¥ããmap
mapping(uint => mapping(address => bool)) public approved;
// åçš®ã€ãã³ãã®å®çŸ©
event Deposit(address indexed sender, uint amount);
event Submit(uint indexed txId);
event Approve(address indexed owner, uint indexed txId);
event Revoke(address indexed owner, uint indexed txId);
event Execute(uint indexed txId);
// åŒã³åºãå
ã®ã¢ãã¬ã¹ãownerã§ããããã§ãã¯ãã修食å
modifier onlyOwner() {
require(isOwner[msg.sender], "msg.sender must be owner address");
_;
}
// æå®ããIDã«è©²åœãããã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãååšããããã§ãã¯ãã修食å
modifier txExists(uint _txId) {
require(_txId < transactions.length, "tx does not exist");
_;
}
// æ¿èªãã¿ããã§ãã¯ãã修食å
modifier notApproved(uint _txId) {
require(!approved[_txId][msg.sender], "tx already approved");
_;
}
// æå®ããIDã®ãã©ã³ã¶ã¯ã·ã§ã³ããããŒããã£ã¹ãæžã¿ããã§ãã¯ãã修食å
modifier notExecuted(uint _txId) {
require(!transactions[_txId].executed, "this tx already executed");
_;
}
/**
* ã³ã³ã¹ãã©ã¯ã¿ãŒ
* @param _name ãŠã©ã¬ããã®åå
* @param _owners ownerçšã®ã¢ãã¬ã¹ã®é
å
* @param _required éŸå€
*/
constructor(string memory _name, address[] memory _owners, uint _required) {
// åŒæ°ã®å
容ããã§ãã¯ããã
require(_owners.length > 0, "number of owner addresses must be more than zero!!");
require(_required > 0 && _required <= _owners.length, "invalid required number of owners");
// ownerã®ã¢ãã¬ã¹çŸ€ãé
åãšmapã«è©°ããŠãã
for(uint i; i < _owners.length; i++) {
// ownerã¢ãã¬ã¹ãååŸããã
address owner = _owners[i];
// ownerã®ã¢ãã¬ã¹ãæ¡ä»¶ãæºãããŠããããã§ãã¯ããã
require(owner != address(0), "invalid address");
// åãã¢ãã¬ã¹ãé£ç¶ã§ç»é²ãããã®ãé²ã
require(!isOwner[owner], "owner is not unique");
// mapãšé
åã«ã»ããããã
isOwner[owner] = true;
owners.push(owner);
}
// ãŠã©ã¬ããã®ååãèšå®
walletName = _name;
// éŸå€ãèšå®
required = _required;
}
/**
* å
¥éçšã®ã¡ãœãã
*/
receive() external payable {
// ã€ãã³ãã®çºè¡
emit Deposit(msg.sender, msg.value);
}
/**
* ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãäœæããã¡ãœãã
* @param _to ééå
ã¢ãã¬ã¹
* @param _value ééé¡
* @param _data ãã€ãããŒã¿
*/
function submit(address _to, uint _value, bytes calldata _data) external onlyOwner {
// Transactionåã®ããŒã¿ãäœæããŠé
åã«æ ŒçŽããã
transactions.push(Transaction({
to: _to,
value: _value,
data: _data,
executed: false
}));
// ã€ãã³ãã®çºè¡
emit Submit(transactions.length - 1);
}
/**
* æå®ããIDã®ãã©ã³ã¶ã¯ã·ã§ã³ãæ¿èªããã¡ãœãã
* @param _txId ãã©ã³ã¶ã¯ã·ã§ã³ID
*/
function approve(uint _txId)
external
onlyOwner
txExists(_txId)
notApproved(_txId)
notExecuted(_txId)
{
// æ¿èªæžã¿ã®ãã©ã°ããªã³ã«ããã
approved[_txId][msg.sender] = true;
// ã€ãã³ãã®çºè¡
emit Approve(msg.sender, _txId);
}
/**
* æå®ããŠIDã®ãã©ã³ã¶ã¯ã·ã§ã³ã®æ¿èªæ°ãååŸããã
* @param _txId ãã©ã³ã¶ã¯ã·ã§ã³ID
*/
function _getApprovalCount(uint _txId) public view returns (uint count) {
// ã«ãŒãã«ããæ¿èªæ°ãååŸããã
for(uint i; i < owners.length; i++) {
// ããæ¿èªãããŠãããcountãã€ã³ã¯ãªã¡ã³ãããã
if (approved[_txId][owners[i]]) {
count += 1;
}
}
}
/**
* ãã©ã³ã¶ã¯ã·ã§ã³ããããŒããã£ã¹ãããã¡ãœãã
* @param _txId ãã©ã³ã¶ã¯ã·ã§ã³ID
*/
function execute(uint _txId) payable external txExists(_txId) notExecuted(_txId) {
// éŸå€ä»¥äžã®æ¿èªãåŸãããŠããããã§ãã¯ããã
require(_getApprovalCount(_txId) >= required, "approvals < required");
// ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãäœæããã
Transaction storage transaction = transactions[_txId];
// å®è¡æžã¿ã®ãã©ã°ããªã³ã«ãã
transaction.executed = true;
// ãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããã
(bool success, ) = payable(transaction.to).call{value: transaction.value}(
transaction.data
);
// ãã©ã³ã¶ã¯ã·ã§ã³ãæåããããã§ãã¯ããã
require(success, "tx failid");
// ã€ãã³ãã®çºè¡
emit Execute(_txId);
}
/**
* ãã©ã³ã¶ã¯ã·ã§ã³ã®æ¿èªãåé€ããã¡ãœãã
* @param _txId ãã©ã³ã¶ã¯ã·ã§ã³ID
*/
function revoke(uint _txId) external onlyOwner txExists(_txId) notExecuted(_txId) {
// æ¿èªãããŠãããã©ãããã§ãã¯ãã
require(approved[_txId][msg.sender] = true);
// æ¿èªæžã¿ã®ãã©ã°ããªãã«ããã
approved[_txId][msg.sender] = false;
// ã€ãã³ãã®çºè¡
emit Revoke(msg.sender, _txId);
}
/**
* ãŠã©ã¬ããã®ååãååŸããã¡ãœãã
*/
function getName() public view returns (string memory) {
return walletName;
}
/**
* ãŠã©ã¬ããã®éŸå€ãååŸããã¡ãœãã
*/
function getRequired() public view returns (uint) {
return required;
}
/**
* ownerã®ã¢ãã¬ã¹æ°ãååŸããã¡ãœãã
*/
function getOwnersCount() public view returns (uint) {
return owners.length;
}
/**
* ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãå
šãŠååŸããã¡ãœãã
*/
function getTxs() public view returns (Transaction[] memory) {
return transactions;
}
}
ãã®ä»ã«ãhttps://solidity-by-example.org/app/multi-sig-wallet/ ãyoutubeãªã©ã«ã·ã³ãã«ãªãã«ãã·ã°ã³ã³ãã©ã¯ããäœæããæ¹æ³ã¯èšèŒãããŠããŸãïŒ
ãã®ä»ãã»ãã¥ãªãã£ã®ã¹ãã·ã£ãªã¹ããšãèšããBitGo瀟ãGnosisSafeãäœæããŠãããã«ãã·ã°ã³ã³ãã©ã¯ããããããã¡ãã¯ãã¹ããã³ãŒãã®ãªã©ãããªããã£ããããŠãããæ§é ãäžã®ã³ã³ãã©ã¯ãããè€éã«ãªã£ãŠããŸãïŒ
ã»ãã¥ã¢ãªã³ãŒããéçºããã®ã¯é£æåºŠããã¯ãé«ããã§ãã»ã»ã»ã
3. ãã¢
â ãã¡ãã®Dappãå©çšããŸãïŒ
ãã¢ã§ã¯ã2-of-3ã®ãã«ãã·ã°ã³ã³ãã©ã¯ããäœæããŠå®éã«çœ²åã»ééãè¡ããŸãïŒ
ãã¢ã§ãã£ãããš
- 2-0f-3ã®ãã«ãã·ã°ã³ã³ãã©ã¯ããŠã©ã¬ãããäœæããã
- ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãäœæããã
- 1.ã§äœæãããã«ãã·ã°ã³ã³ãã©ã¯ããŠã©ã¬ããã«ééçšã®ETHãdepositããã
- 2人ã®ownerã«ããæ¿èªåŠçã宿œããã
- ééåŠçãå®è¡ããã
- ééçµæã確èªããïŒ
ãã¢ã§å©çšããã¢ãã¬ã¹
owner1 : 0x51908F598A5e0d8F1A3bAbFa6DF76F9704daD072
owner2 : 0x9f9115893713934AA5AFd3540937eB60ea43eb3a
owner3 : 0xb5a05Af300C50baAadE18f8EA8AA7e856177Afe8
éä¿¡å ïŒ0xEef377Bdf67A227a744e386231fB3f264C158CDF
å®éã«ãããã€ããŠããã³ã³ãã©ã¯ãã®æ å ±
No. | ã³ã³ãã©ã¯ãå | ãããã¯ãŒã¯ | ã¢ãã¬ã¹ |
---|---|---|---|
1 | WalletFactory | Goerli | 0x3c955E552Fd383435765313330301c23f014e0a6 |
2 | MultiSigWallet | Goerli | 0x5ba5DF0955d0C95500966acE28041F3D7BC45D1D |
3 | WalletFactory | Mumbai | 0xFEbf942Ce0f403a48a01D4757710289E0458bca9 |
4 | MultiSigWallet | Mumbai | 0x455d21AE3F9Cdd21365757B5528bbE3b3eCC1C1A |
4. æ®èª²é¡ãšæ¡åŒµæ§ã«ã€ããŠ
çŸæ®µéã§æããŠããæ®èª²é¡ã»æ¡åŒµæ§ã«ã€ããŠã¯ä»¥äžã®éãã§ãã
- æ®èª²é¡
No | èª²é¡ |
---|---|
1 | ééåŠçã«ã®ã¿ãã察å¿ããŠããªãããš |
2 | ãã£ãšã»ãã¥ã¢ã«ããããã«ã¯ãecrecover()ãªã©ãå©çšããŠæ€èšŒã峿 Œåããå¿ èŠãããã |
3 | ã©ããªã¢ã«ãŠã³ãã§ããã«ãã·ã°ãäœããŠããŸãç¶æ ã«ãªã£ãŠããã |
4 | ã©ããªã¢ã«ãŠã³ãã§ããã«ãã·ã°ãäœããŠããŸãç¶æ ã«ãªã£ãŠããã |
5 | èãã«ããããè€æ°ã®ããŒã ããã«ãã·ã°ã³ã³ãã©ã¯ããå ±æããŠããå Žåã«ãè³éãæãããå¯èœæ§ãããã |
- æ¡åŒµæ§
No | é ç® |
---|---|
1 | çŸåšæµè¡ãã®AAã«ã䜿ããèšèšãã¿ãŒã³ãªã®ã§ãç§å¯éµãå¿ èŠãšããªããŠã©ã¬ããã¢ããªãéçºã§ãããïŒâ Web3ã®ãã¹ã¢ããªãã·ã§ã³ïŒ |
2 | NFTã®çºè¡åŠçãªã©éé以å€ã®åŠçã«ãå¿çšã§ããã°ãŠã©ã¬ãããšããŠãååã«æ©èœããã¯ããªã®ã§ãããã«ãœã³ãªã©ã§ãã£ãŠã¿ããã |
5. ãã«ãã·ã°ãš ã³ã³ãã©ã¯ããŠã©ã¬ããã«ã€ããŠ
MultiSigWalletã³ã³ãã©ã¯ãã«ã¯ããã³ã³ãã©ã¯ããŠã©ã¬ããããšããèãæ¹ãæ¡çšãããŠããŸãã
ã³ã³ãã©ã¯ããŠã©ã¬ããã®å¿çšãšããŠã¯ã**AA(Account Abstraction)ãããªãçãäžãã£ãŠããŠãããETHIndiaã§ãAA(Account Abstraction)**ã®èãæ¹ãæ¡çšãããããã¯ãã1st prizeãç²åŸãããªã©æ³šç®ãéããŠããŸãã
AAã¯äœ¿ã£ãŠããŸãããããã£ãããªã®ã§ã³ã³ãã©ã¯ããŠã©ã¬ãããšAAã®èãæ¹ã«ã€ããŠãè§ŠããŠãããããšæããŸãïŒïŒ
äžæŠãé¢é£çšèªã®æŽçãããŸãïŒ
EIP-4337ã®è©³çްã«ã€ããŠã¯ãŽã£ã¿ãªãã¯ããã®èšäºã®äžã§ã玹ä»ãããŠããã
éèŠã«ãªãã®ã¯ãBundlerãšãšã³ããªãŒãã€ã³ãã³ã³ãã©ã¯ã!!
ä»åã®ãã¢ã§å ±æãããã«ãã·ã°Dappdeã§ã¯ãfactoryã³ã³ãã©ã¯ãããMultiSigWalletã³ã³ãã©ã¯ããçæããowneréã®å ±æã®è³éããŒã«ãšããŠMultiSigWalletã³ã³ãã©ã¯ããå©çšããŠããŸãã(è€æ°äººã§äžã€ã®ãŠã©ã¬ãããå ±æããŠäœ¿ã£ãŠããã€ã¡ãŒãž)
AAãšããŠå®è£ ãããŠã¯ããªãã®ã§ãŠãŒã¶ãŒã§ããownerã¯ãèªåã§éµãææããŠçœ²åãè¡ãå¿ èŠããããŸãããå®è¡ããããã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãã³ã³ãã©ã¯ããŠã©ã¬ããã«ç»é²ããŠããããã®åŸå®è¡æç€ºãåºããŠééçšã®ãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããŠããŸãã(ETHãåºãã®ã¯ã³ã³ãã©ã¯ããŠã©ã¬ããããïŒ)
å€ããã¿ããšå人ã®ãŠã©ã¬ãã(EOA)ãšäœãå€ãããªãããã«æ¯ãèã£ãŠããŸãããéåžžã®ãŠã©ã¬ãããšç°ãªãç¹ãæŽçãããšäžèšã®éãã§ãã
- å人ã®ãŠã©ã¬ãã(EOA)ã®ããã«ç§å¯éµãååšããªãããš
- æ¿èªãäžå®æ°åŸãããåŸå®å ã®ã¢ãã¬ã¹ã«ETHãéããšããæ©èœãæã£ãŠããããš
- depositæ©èœãæã£ãŠããããš
ã³ã³ãã©ã¯ããŠã©ã¬ããã®èãæ¹ã«ã€ããŠã¯äžèšã®èšäºãšã¹ã©ã€ãããããããããŸãšããŠãããŠããŸãïŒ
AAã«ã€ããŠããã«æ·±ãç¥ããããšããæ¹ã¯ãCryptoGamesã®Yukiããããããããã解説ããŠãããŠããèšäºãããã®ã§ãã¡ããåç §ãããããããŸãïŒ
ERC-4337ã§å®è£ ãããã·ã¹ãã ãã©ã®ããã«åãã®ãå®éã«æãåãããŠã¿ãããšããæ¹ã¯ãStackUp瀟ããµã³ãã«ã®ãªããžããªãå ¬éããŠãããŠããã®ã§ãæè»œã«AAãå©çšããééã®ä»çµã¿ãäœéšããããšãã§ããŸãïŒ
-
ééåŠçã®å®è¡äŸ
- MATICã®ééåŠç
Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x0", "initCode": "0xe19e9755942bb0bd0cccce25b1742596b8a8250b3bf2c3e700000000000000000000000078d4f01f56b982a3b03c4e127a5d3afa8ebee68600000000000000000000000051908f598a5e0d8f1a3babfa6df76f9704dad0720000000000000000000000000000000000000000000000000000000000000000", "callData": "0x80c5c7d00000000000000000000000001431ea8af860c3862a919968c71f901aede1910e000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0x5580", "verificationGasLimit": "0x129727", "maxFeePerGas": "0xa2c22e83", "maxPriorityFeePerGas": "0xa2c22e65", "paymasterAndData": "0x", "preVerificationGas": "0xc644", "signature": "0xff954fe43538bf8fff0f928aa03f58c62b7c28d9b14912c4e1b452853124bd622053de4915a85e55697f714e80bf7668670e043467d2116df33979a1c2fd2f551b" } UserOpHash: 0x854c14b08bd913b7960edc3d4cbef6d65666e20e1494c4a0831a46cb18829fd1 Waiting for transaction... Transaction hash: 0xc561b6a5410ffc8c10bd36b4102a08e57dc92040e4706526c3acedc42143d20d âš Done in 13.44s.
- ERC20èŠæ ŒããŒã¯ã³ã®ééåŠç
Transferring 0.04 LINK... Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x1", "initCode": "0x", "callData": "0x80c5c7d0000000000000000000000000326c977e6efc84e512bb9c30f76e30c160ed06fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000001431ea8af860c3862a919968c71f901aede1910e000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0xe6fc", "verificationGasLimit": "0x186a0", "maxFeePerGas": "0xca0f4bb3", "maxPriorityFeePerGas": "0xca0f4b95", "paymasterAndData": "0x", "preVerificationGas": "0xc37c", "signature": "0x06bcf3dcded028a8c42ef90c72f4fea98e54ecd4da2366288cb50851ee60ee0512d6f74a998633109d9352ad0453e3665aa3171147bcf8a876676449499eeef61b" } UserOpHash: 0xade156da0c2b036926618ed914b2f87dca006d14ba4de29e949326be89cc4096 Waiting for transaction... Transaction hash: 0xdc695a878c6bbfa8e149ea19fddcaad782f98707971d81201d4954113810dd2c âš Done in 13.16s.
- MATICã®ééåŠç(è€æ°ã®äžæ¬éé)
Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x0", "initCode": "0x", "callData": "0x80c5c7d0000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000204d0cb75fa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb00000000000000000000000051908f598a5e0d8f1a3babfa6df76f9704dad07200000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000001431ea8af860c3862a919968c71f901aede1910e00000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0xe31a", "verificationGasLimit": "0x186a0", "maxFeePerGas": "0x7d7a574e", "maxPriorityFeePerGas": "0x7d7a5730", "paymasterAndData": "0x", "preVerificationGas": "0xd56c", "signature": "0x804964cc35c21fcb0fd1b4c4fe854a9deb5c7ea9117d68c31b4948914d282fdc53812ebb003ee542e35af8793b60917b0600be54fd05192598a6df396c6c47a81b" } UserOpHash: 0x77b6dd28dbd8691ea0ae23cc63bbd32f18889723e1c31f04cf534ae7e47569e5 Waiting for transaction... Transaction hash: 0x381f4d559a033559d38370b24280ecad09017bf657f41e6eb277a0691cf5f248 âš Done in 16.04s.
- ERC20èŠæ ŒããŒã¯ã³ã®ééåŠç(è€æ°ã®äžæ¬éé)
Batch transferring 0.04 LINK to 2 recipients... Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x2", "initCode": "0x", "callData": "0x80c5c7d0000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000204d0cb75fa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000326c977e6efc84e512bb9c30f76e30c160ed06fb000000000000000000000000326c977e6efc84e512bb9c30f76e30c160ed06fb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000001431ea8af860c3862a919968c71f901aede1910e000000000000000000000000000000000000000000000000008e1bc9bf040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a9059cbb00000000000000000000000051908f598a5e0d8f1a3babfa6df76f9704dad072000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0xea85", "verificationGasLimit": "0x186a0", "maxFeePerGas": "0x99adc148", "maxPriorityFeePerGas": "0x99adc12a", "paymasterAndData": "0x", "preVerificationGas": "0xd560", "signature": "0x9efbbce4eedb58268350032f6033db120bfe54d34ca920bb15ff72c46f681a2032b2609cb910b646abb5cd87b65a5e1d1e86205bcc64e60d971fff210e72cd611c" } UserOpHash: 0x856e6d3741c710a76eb4e300fee208b8a33f93425f59be5ed3fea4a35ace9db9 Waiting for transaction... Transaction hash: 0xab22e6bf970c6784aa6d9aa0e44a19adf428999b28370fbe4390fdcc63a31c63 âš Done in 16.64s.
æ®èª²é¡ã«ãèšèŒããéããç§å¯éµãå¿ èŠãšããªããŠã©ã¬ããã¢ããª(ãã®ä»£ããKYCã«ã¯å³æ Œãªä»æ§ãæ±ããããã¯ã)ã®éçºã«ãç¹ãããããã§ãïŒ!
ä»ã®ç¶æ ã§ã¯ã»ãã¥ãªãã£ãæèããä»çµã¿ã«ãªã£ãŠããŸãããæ§ã ãªãŠãŒã¹ã±ãŒã¹ã«ãå¿çšãå¹ããããªæ°ãããŠããŸãïŒ
å æ¥ãETHIndiaã§1st prizeãç²åŸããFireWalletã§ãAAã®èãæ¹ãæ¡çšãããŠãããä»åŸã¯äœ¿ããããäžã€å®å šãªãŠã©ã¬ãããèºèµ·ã«ãªã£ãŠéçºããåããæŽ»çºåããŠãããšèããããã®ã§ãã¯ããã®èšèšãã¿ãŒã³ã¯ãã¹ã¿ãŒãããã»ã»ïŒ
ç§å¯éµã®ç®¡çã¯ãWeb3ã®ãã¹ã¢ããã·ã§ã³ã劚ããŠãã倧ããªèŠå ã®äžã€ã ãšèããŠãããAIãã¯ã©ãŠããªã©ã®æ§ãªäžã®äžã«åãå ¥ããããæ±çšçãªæè¡ã«æè¯ããããã«ã¯ãã®èª²é¡è§£æ±ºãå¿ é ïŒïŒ
ãã ãäžã«ã¯AAãæµžéããŠããããšã«ã€ããŠçåèŠããæ¹ãããã®ã§ãã©ã®ãããªãŠã©ã¬ããããã£ãšãåãå ¥ããããŠãããã¯ãåŒãç¶ãã¢ã³ããã貌ã£ãŠæ å ±ãåéãã€ã€ãããã«ãœã³ãªã©ã«åºãŠãããã¿ã€ããäœã£ãŠããããšãéèŠã ãšèããŠããŸãïŒïŒ
åçµDAOã®ukishimaããã®ãã€ãŒãã¯åèã«ãªããŸããïŒïŒ
6. ãã«ãã·ã° VS MPC
ãã«ãã·ã°ãšäžŠãã§ãWeb3é åã§æ³šç®ãããŠããæè¡ã MPC(ãã«ãããŒãã£èšç®)ãæŽ»çšãã眲åã®ä»çµã¿ã§ã!!
ãŸãçšèªã®æŽçãšããŠãç§å¯èšç®ã»ç§å¯åæ£ã»MPCã®æå³ãæŽçããŸãïŒ
ãã®ç§å¯èšç®ã®ä»çµã¿ãå®çŸãããããã«äž»èŠãªæ¹æ³ã2çš®é¡ååšããïŒððððððð
- æºååæå·æ¹åŒ
- ç§å¯åæ£æ¹åŒ
ç§å¯èšç®ãšç§å¯åæ£ã«ã€ããŠè©³ããç¥ãããæ¹ã¯ãäžèšãªã³ã¯ã確èªããŠãã ããïŒ
â ç§å¯åæ£ãå©çšããŠç§å¯éµã忣ããããããå床ç§å¯éµã埩å âš ã¢ãã¬ã¹åŸ©å âš ééãŸã§ããã¹ãã§ããç°¡æã¹ã¯ãªãããäœæããŠã¿ãŸããã®ã§èå³ããæ¹ã¯ãã²ãã¡ããïŒïŒ
ç§å¯éµã®ããŒã¿ããã®ãŸãŸäœ¿ããã«ãã·ã°ã«æ¯ã¹ãŠãåäœã§ã¯æå³ã®ãªãããŒã¿ã«åå²ããŠç®¡çããããšã«ãªãMPCã®æ¹ãããã»ãã¥ã¢ã ãšèããŠãããŠããŸãã(äžãäžãäžç®æã§æŒããŠããã¡ãŒãžã¯MPCã®æ¹ãå°ããã¯ãã§ãã)
æ¯èŒè¡š
ãã«ãã·ã°(ããã§ã¯æ¯èŒã®ãããã¹ãã³ã³ã«ãããã«ãã·ã°ãæ³å®) | MPC | |
---|---|---|
眲ååŠçã®å®è¡å Žæ | ãªã³ãã§ãŒã³ | ãªããã§ãŒã³ |
å®è£ é£æåºŠ | äž | é« |
å¿çšã®å¹ | ãããã³ã€ã³ãšã€ãŒãµãªã¢ã ã®æ§ã«å¯Ÿå¿ãããã§ãŒã³ã®ä»æ§ã«ãã£ãŠããã°ã©ã ãå€ããã®ã§è€æ°ãã§ãŒã³ã«å¯Ÿå¿ãããã®ã¯è³é£ã®æã ãšèããŠããã | ãããã¯ãã§ãŒã³ãããã³ã«ã®åœ±é¿ãåãã«ããã®ã§å€æ°ã®ãã§ãŒã³ã«å¿çšãå¹ãããããšèããããŠããã |
å®è£ é£æåºŠã¯ãå§åçã«MPCã®æ¹ãé«ãã§ããå®è£ ã§ããã°å¿çšãå¹ããã®ã§ãïŒ
ãã«ãã·ã°ã®æ¹ã¯ãEVM察å¿ã®ãã§ãŒã³ã§ããã°ãã«ãã·ã°ã³ã³ãã©ã¯ãã䜿ããŸããã°è¡ãããããããŸãããããããã³ã€ã³ãNEARãªã©ã®ãã§ãŒã³ãªã©ã«å¯Ÿå¿ãããšãªããšãŸãéãã®ã§å¯Ÿå¿ã倧å€ã§ãããããã³ã«ã¬ã€ã€ãŒã«ãã£ãŠå·Šå³ãããŠããŸãã®ã¯éªšãæãããšããã
ãã£ãšç¥ãããïŒïŒãšããæ¹ã¯äžèšã®èšäºãããããã§ãïŒ
7. æåŸã«
ãŠã©ã¬ããã³ã³ãã©ã¯ãã®èãæ¹ãšåããããšãã¡ããã¡ãã»ãã¥ã¢ãªãŠã©ã¬ããã¢ããªãäœããããïŒïŒã(KYCã¯ãŒãç¥è蚌æãçäœèªèšŒãªã©ã掻çšããŠå³æ Œåiã¯å¿ é ã§ããïŒïŒ)
çµå±ã©ããã«å¿ ããã©ã¹ããã€ã³ããçãŸããã®ã§ããããåŠäœã«å®ããªããé åçãªã¢ããªãæäŸããŠãããããéèŠãªãã€ã³ãã«ãªãããã§ãïŒ(äžè¬ãŠãŒã¶ãŒãå šå¡å ¬é鵿巿¹åŒã®ããšãçè§£ã§ããã°è¯ãã®ã§ãããå®çŸã§ãããšããŠããšãã§ããªãæéããããããã§ãã»ã»ã)
ããšã¯ãMetaMaskã ãšUXçã«ãå°ãããŒãã«ãé«ãã®ã§ãã£ãšã·ã³ãã«ãªãããã¯ãã«ããå¿ èŠãããããã§ããäžã®ãã€ãŒãã¯é¢çœããšæã£ãäžäŸã§ãããæèŒªã®äžã«çœ²åéµãå ¥ããŠãããŠããã§çœ²åãšãã§ãããèŠãç®çã«ããªã·ã£ã¬ã ã䜿ããããã®ã§äžã®äžã«æµžéãããã§ããïŒ
ãŠã©ã¬ããã®è©±ã«ãªããšãœãããŠã§ã¢ã ãã§ãªãããŒãé¢ãèããªããŠã¯ãããªãã®ã§é£ããã§ããæåŸã¯ãããæ¡ã£ããšãããåã¡ããã§ããïŒ!
é·æãšãªããŸããããæåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ
2023幎ããããããé¡ãããããŸãïŒïŒ
åèæç®
- https://github.com/mashharuki/MultiSigWalletContract
- https://coincheck.com/ja/article/410
- https://speakerdeck.com/avcdsld/dapper-contract
- https://zenn.dev/mashharuki/articles/a6973bac677427
- https://acompany.tech/privacytechlab/mpc-homomorphic-encryption/
- https://www.fireblocks.com/
- https://jpn.nec.com/press/202201/20220112_02.html
- https://solidity-by-example.org/app/multi-sig-wallet/
- https://github.com/BitGo/eth-multisig-v4
- https://gnosis-safe.io/
- https://academy.binance.com/en/articles/what-is-a-multisig-wallet
- https://academy.binance.com/en/articles/threshold-signatures-explained
- https://qiita.com/bootarouapp/items/b39ca1484874dfb37d46
- https://zenn.dev/sivira/articles/d041f1ac44ca1e
- https://github.com/mashharuki/SecretSharingRepo
- https://drive.google.com/file/d/12MJVIJFYaCWBOB0JUXTNhhTMAryCZYbt/view
- https://meety.net/matches/FHQNZgHvWgSh
- https://eips.ethereum.org/EIPS/eip-4337
- https://www.nri.com/jp/knowledge/glossary/lst/ha/secure_computation
- https://www.eaglys.co.jp/news/column/secure-computing/mpc/
- https://acompany.tech/privacytechlab/mpc-homomorphic-encryption/
- https://zenn.dev/yuki2020/articles/302e0d2b58e95
- https://zenn.dev/sivira/articles/34e8147f206ff5
- https://github.com/mashharuki/AA-dapp
Discussion