A method for multi-factor authentication for blockchain services, the method comprising: holding, by a push-mode multi-factor authentication server, an account of an end-user, the account being identifiable via an accountID; establishing, by the end-user, a multi-factor approval status in the push-mode multi-factor authentication server; in response to an operation to be performed in a customer smart contract, the customer smart contract interacting with the push-mode multi-factor authentication server to confirm the established multi-factor approval status, the interacting step comprising: - checking whether a mapping between a public key and the accountID exists, wherein if the mapping exists, a multi-factor authentication provider smart contract, that is deployed in at least one blockchain, returns the accountID together with an address of an oracle server and an integer that identifies a task in the oracle server, and if the mapping does not exist, a noPaired notification is returned; - calling a function in SDK and performing an in-chain call to a function OracleRequest in an oracle operator smart contract, the function Oracle Request including: the accountlD, a callback smart contract address; a callback smart contract function Id, an oracle token address, and the integer; - performing, by the oracle operator smart contract, a gas payment and emitting an event with the accountID and the integer as parameter; - upon reception of the event, the oracle server executing the task identified by the integer, the task performing an API call to an oracle interaction backend that further calls a checkStatus API; - in response to the checkStatus API, the multi-factor authentication server returning the established multi-factor approval status to the oracle server via the oracle interaction backend; - given the established multi-factor approval status, performing, by the oracle server, a call to a function fullfillOracleRequest2 of the oracle operator smart contract, the latter further propagating the established multi-factor approval status to the customer smart contract. holding, by a push-mode multi-factor authentication server, an account of an end-user, the account being identifiable via an accountID; establishing, by the end-user, a multi-factor approval status in the push-mode multi-factor authentication server; in response to an operation to be performed in a customer smart contract, the customer smart contract interacting with the push-mode multi-factor authentication server to confirm the established multi-factor approval status, the interacting step comprising: - checking whether a mapping between a public key and the accountID exists, wherein if the mapping exists, a multi-factor authentication provider smart contract, that is deployed in at least one blockchain, returns the accountID together with an address of an oracle server and an integer that identifies a task in the oracle server, and if the mapping does not exist, a noPaired notification is returned; - calling a function in SDK and performing an in-chain call to a function OracleRequest in an oracle operator smart contract, the function Oracle Request including: the accountlD, a callback smart contract address; a callback smart contract function Id, an oracle token address, and the integer; - performing, by the oracle operator smart contract, a gas payment and emitting an event with the accountID and the integer as parameter; - upon reception of the event, the oracle server executing the task identified by the integer, the task performing an API call to an oracle interaction backend that further calls a checkStatus API; - in response to the checkStatus API, the multi-factor authentication server returning the established multi-factor approval status to the oracle server via the oracle interaction backend; - given the established multi-factor approval status, performing, by the oracle server, a call to a function fullfillOracleRequest2 of the oracle operator smart contract, the latter further propagating the established multi-factor approval status to the customer smart contract. - checking whether a mapping between a public key and the accountID exists, wherein if the mapping exists, a multi-factor authentication provider smart contract, that is deployed in at least one blockchain, returns the accountID together with an address of an oracle server and an integer that identifies a task in the oracle server, and if the mapping does not exist, a noPaired notification is returned; - calling a function in SDK and performing an in-chain call to a function OracleRequest in an oracle operator smart contract, the function Oracle Request including: the accountlD, a callback smart contract address; a callback smart contract function Id, an oracle token address, and the integer; - performing, by the oracle operator smart contract, a gas payment and emitting an event with the accountID and the integer as parameter; - upon reception of the event, the oracle server executing the task identified by the integer, the task performing an API call to an oracle interaction backend that further calls a checkStatus API; - in response to the checkStatus API, the multi-factor authentication server returning the established multi-factor approval status to the oracle server via the oracle interaction backend; - given the established multi-factor approval status, performing, by the oracle server, a call to a function fullfillOracleRequest2 of the oracle operator smart contract, the latter further propagating the established multi-factor approval status to the customer smart contract.